藍(lán)寶書 第三章
畫點(diǎn) Point1)單個(gè)點(diǎn)
glVertex3f(50.0f,50.0f,0.0f) 3D圖像的點(diǎn)
glVertex2f(50.0f,50.0f) 2D圖像的點(diǎn)
2)多個(gè)點(diǎn)
glBegin(GL_POINTS)
……
glEnd();
相關(guān)代碼見例3.2
3)設(shè)置點(diǎn)大小
void glPointSize(GLfloatsize);設(shè)置點(diǎn)的大小
GLfloat sizes[2]; // 存放點(diǎn)大小的范圍
GLfloat step; // 存放每次改變點(diǎn)大小的最小增量
glGetFloatv(GL_POINT_SIZE_RANGE,sizes);
glGetFloatv(GL_POINT_SIZE_GRANULARITY,&step);
相關(guān)代碼見例3.3
例3.1 窗口改變響應(yīng)函數(shù)--3D版
void ChangeSize(GLsizei w, GLsizei h){ GLfloat nRange = 100.0f; // PRevent a divide by zero if (h == 0) h = 1; // Set Viewport to window dimensions glViewport(0, 0, w, h); // Reset projection matrix stack glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Establish clipping volume (left, right, bottom, top, near, far) if (w <= h) glOrtho(-nRange, nRange, -nRange*h / w, nRange*h / w, -nRange, nRange); else glOrtho(-nRange*w / h, nRange*w / h, -nRange, nRange, -nRange, nRange); // Reset Model view matrix stack glMatrixMode(GL_MODELVIEW); glLoadIdentity();}例3.2 顯示多個(gè)點(diǎn)#include <windows.h>#include <math.h>#include <GL/GL.h>#include <GL/GLU.h>#include <GL/glut.h>// Define a constant for the value of PI#define GL_PI 3.1415f// This function does any needed initialization on the renderingvoid RenderScene(void){ GLfloat x, y, z, angle; // Storage for coordinates and angles // Clear the window with current clearing color glClear(GL_COLOR_BUFFER_BIT); // Save matrix state and do the rotation glPushMatrix(); glRotatef(30.0f, 1.0f, 0.0f, 0.0f);//書中的xRot代表x軸偏移的角度,此處改為x軸偏移30度 glRotatef(30.0f, 0.0f, 1.0f, 0.0f);//書中的yRot代表y軸偏移的角度,此處改為y軸偏移30度 // Call only once for all remaining points glBegin(GL_POINTS); z = -50.0f; for (angle = 0.0f; angle <= (2.0f*GL_PI)*3.0f; angle += 0.1f) { x = 50.0f*sin(angle);//sin輸入為弧度 y = 50.0f*cos(angle); // Specify the point and move the Z value up a little glVertex3f(x, y, z); z += 0.5f; } // Done drawing points glEnd(); // Restore transformations glPopMatrix(); // Flush drawing commands glutSwapBuffers();}void SetupRC(){ // Black background glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Set drawing color to green glColor3f(0.0f, 1.0f, 0.0f);}void ChangeSize(GLsizei w, GLsizei h){ GLfloat nRange = 100.0f; // Prevent a divide by zero if (h == 0) h = 1; // Set Viewport to window dimensions glViewport(0, 0, w, h); // Reset projection matrix stack glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Establish clipping volume (left, right, bottom, top, near, far) if (w <= h) glOrtho(-nRange, nRange, -nRange*h / w, nRange*h / w, -nRange, nRange); else glOrtho(-nRange*w / h, nRange*w / h, -nRange, nRange, -nRange, nRange); // Reset Model view matrix stack glMatrixMode(GL_MODELVIEW); glLoadIdentity();}int main(int argc, char* argv[]){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); glutInitWindowSize(800, 600); glutCreateWindow("Bounce"); glutDisplayFunc(RenderScene);//顯示回調(diào)函數(shù) glutReshapeFunc(ChangeSize);//窗口大小變形回調(diào)函數(shù) SetupRC(); glutMainLoop(); return 0;}例3.3 點(diǎn)大小的改變#include <windows.h>#include <math.h>#include <GL/GL.h>#include <GL/GLU.h>#include <GL/glut.h>// Define a constant for the value of PI#define GL_PI 3.1415f// This function does any needed initialization on the renderingvoid RenderScene(void){ GLfloat x, y, z, angle; // Storage for coordinates and angles GLfloat sizes[2]; // Store supported point size range GLfloat step; // Store supported point size increments GLfloat curSize; // Store current point size // Clear the window with current clearing color glClear(GL_COLOR_BUFFER_BIT); // Save matrix state and do the rotation glPushMatrix(); glRotatef(30.0f, 1.0f, 0.0f, 0.0f);//書中的xRot代表x軸偏移的角度 glRotatef(30.0f, 0.0f, 1.0f, 0.0f);//書中的yRot代表y軸偏移的角度 // Get supported point size range and step size glGetFloatv(GL_POINT_SIZE_RANGE, sizes); glGetFloatv(GL_POINT_SIZE_GRANULARITY, &step); // Set the initial point size curSize = sizes[0]; // Set beginning z coordinate z = -50.0f; // Call only once for all remaining points glBegin(GL_POINTS); z = -50.0f; for (angle = 0.0f; angle <= (2.0f*GL_PI)*3.0f; angle += 0.1f) { // Calculate x and y values on the circle x = 50.0f*sin(angle); y = 50.0f*cos(angle); // Specify the point size before the primitive is specified glPointSize(curSize); // Draw the point glBegin(GL_POINTS); glVertex3f(x, y, z); glEnd(); // Bump up the z value and the point size z += 0.5f; curSize += step; } // Done drawing points glEnd(); // Restore transformations glPopMatrix(); // Flush drawing commands glutSwapBuffers();}void SetupRC(){ // Black background glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Set drawing color to green glColor3f(0.0f, 1.0f, 0.0f);}void ChangeSize(GLsizei w, GLsizei h){ GLfloat nRange = 100.0f; // Prevent a divide by zero if (h == 0) h = 1; // Set Viewport to window dimensions glViewport(0, 0, w, h); // Reset projection matrix stack glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Establish clipping volume (left, right, bottom, top, near, far) if (w <= h) glOrtho(-nRange, nRange, -nRange*h / w, nRange*h / w, -nRange, nRange); else glOrtho(-nRange*w / h, nRange*w / h, -nRange, nRange, -nRange, nRange); // Reset Model view matrix stack glMatrixMode(GL_MODELVIEW); glLoadIdentity();}int main(int argc, char* argv[]){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); glutInitWindowSize(800, 600); glutCreateWindow("Bounce"); glutDisplayFunc(RenderScene);//顯示回調(diào)函數(shù) glutReshapeFunc(ChangeSize);//窗口大小變形回調(diào)函數(shù) SetupRC(); glutMainLoop(); return 0;}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注