場景
渲染點的時候,如果尺寸比較大,實際上是一個矩形,需要采用反走樣技術。使用反走樣要啟用混合操作, 確定顯示卡的反走樣設定是使用者控制或者打開的。
代碼
#include <GL/glut.h>
void myDisplay(void)
{
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_POINT_SMOOTH);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
glPointSize(10.0f);
glBegin(GL_POINTS);
glColor3f(0.0, 1.0, 0.0);
glVertex2f(0.0, 0.0);
glEnd();
glFlush();
return;
}
int main(int argc, char *argv[])
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("第一個OpenGL程式");
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
建議
一般要畫效果比較好的圓點,最好是使用紋理。
反走樣思路
将相鄰階梯之間的像素顔色設定為過渡色,使之變化柔和,進而物體顯得平滑
問題
1)OpenGL中函數glPointSize的參數解釋是指定栅格化點的直徑
實際上設定為10.0f的情況下,點已經設定為最大值,無法繼續擴大
2)glBegin(GL_POINTS);函數的參數值是GL_POINTS,而不是GL_POINT,切記
3)glPointSize(10.0f);函數的調用必須位于glBegin(GL_POINTS)之前
4)glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);函數的第二個參數值指定GL_ONE無效,該值對于直線的交點才有效
5)畫線條(即使隻畫一根線條)時候應該傳GL_LINES, 不小心傳了GL_LINE,編譯也不會報錯
,但就是沒效果。畫點GL_POINTS,四邊形GL_QUADS。不小心寫了GL_QUAD 編譯報錯 使用了未定義的枚舉變量。GL_LINE,GL_POINT,opengl中用來定義多邊形的繪制模式,還有GL_FILL模式。
本文轉自fengyuzaitu 51CTO部落格,原文連結:http://blog.51cto.com/fengyuzaitu/1878166,如需轉載請自行聯系原作者