天天看點

渲染點

場景

    渲染點的時候,如果尺寸比較大,實際上是一個矩形,需要采用反走樣技術。使用反走樣要啟用混合操作, 確定顯示卡的反走樣設定是使用者控制或者打開的。

代碼

#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,如需轉載請自行聯系原作者

繼續閱讀