首页 > 学院 > 开发设计 > 正文

OpenGL 学习笔记3_1(绘制点相关)

2019-11-11 04:43:55
字体:
来源:转载
供稿:网友

蓝宝书 第三章

画点 Point

1)单个点

glVertex3f(50.0f,50.0f,0.0f)  3D图像的点

glVertex2f(50.0f,50.0f)         2D图像的点

2)多个点

glBegin(GL_POINTS)

……

glEnd();

相关代码见例3.2

3)设置点大小

void glPointSize(GLfloatsize);设置点的大小

GLfloat sizes[2]; // 存放点大小的范围

GLfloat step; // 存放每次改变点大小的最小增量

glGetFloatv(GL_POINT_SIZE_RANGE,sizes);

glGetFloatv(GL_POINT_SIZE_GRANULARITY,&step);

相关代码见例3.3

例3.1 窗口改变响应函数--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   显示多个点

#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);//显示回调函数	glutReshapeFunc(ChangeSize);//窗口大小变形回调函数	SetupRC();	glutMainLoop();	return 0;}例3.3 点大小的改变

#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);//显示回调函数	glutReshapeFunc(ChangeSize);//窗口大小变形回调函数	SetupRC();	glutMainLoop();	return 0;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表