欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OpenGL(五)多边形

程序员文章站 2023-12-27 14:04:03
...

显存只存在显卡里面,是显卡独有的概念,缓冲区是ram区,高速读取区,你写代码操作的所有内存都可以称为缓冲区,显存属于缓冲区的一种

(1)多边形的两面以及绘制方式。

虽然我们目前还没有真正的使用三维坐标来画图,但是建立一些三维的概念还是必要的。
从三维的角度来看,一个多边形具有两个面。每一个面都可以设置不同的绘制方式:填充、只绘制边缘轮廓线、只绘制顶点,其中“填充”是默认的方式。可以为两个面分别设置不同的方式。

glPolygonMode(GL_FRONT, GL_FILL);           // 设置正面为填充方式
glPolygonMode(GL_BACK, GL_LINE);            // 设置反面为边缘绘制方式
glPolygonMode(GL_FRONT_AND_BACK, GL_POINT); // 设置两面均为顶点绘制方式

(2)反转

上面说了正面和反面的绘制方式,但那个是正面那个是反面呢?
正面和反面的区分主要是通过定点的顺/逆时针的绘制顺序来判断
逆时针绘制的是正面
顺时针的是反面

列子:


#include <GL/glut.h>  
using namespace std;
void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPolygonMode(GL_FRONT, GL_FILL); // 设置正面为填充模式
    glPolygonMode(GL_BACK, GL_LINE);  // 设置反面为线形模式
    glFrontFace(GL_CCW);              // 设置逆时针方向为正面 默认
    glBegin(GL_POLYGON);              // 按顺时针绘制一个正方形
    glVertex2f(0.0f, 0.0f);
    glVertex2f(0.5f, 0.0f);
    glVertex2f(0.5f, 0.5f);
    glVertex2f(0.0f, 0.5f);
    glEnd();
    glBegin(GL_POLYGON);              // 按逆时针绘制一个正方形
    glVertex2f(0.0f, 0.0f);
    glVertex2f(0.0f, -0.5f);
    glVertex2f(-0.5f, -0.5f);
    glVertex2f(-0.5f, 0.0f);
    glEnd();
    glFlush();
}

int main(int argc, char* argv[])
{
	glutInit(&argc, argv);   //初始化GLUT
	glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
	glutInitWindowPosition(100, 100);
	glutInitWindowSize(400, 400);
	glutCreateWindow("My first OpenGL program");
	glutDisplayFunc(&myDisplay);   //回调函数 
	glutMainLoop();    //持续显示,当窗口改变会重新绘制图形
	return 0;
}

结果:
OpenGL(五)多边形

一般约定为“顶点以逆时针顺序出现在屏幕上的面”为“正面”,另一个面即成为“反面”。生活中常见的物体表面,通常都可以用这样的“正面”和“反面”,“合理的”被表现出来(请找一个比较透明的矿泉水瓶子,在正对你的一面沿逆时针画一个圆,并标明画的方向,然后将背面转为正面,画一个类似的圆,体会一下“正面”和“反面”。你会发现正对你的方向,瓶的外侧是正面,而背对你的方向,瓶的内侧才是正面。正对你的内侧和背对你的外侧则是反面。这样一来,同样属于“瓶的外侧”这个表面,但某些地方算是正面,某些地方却算是反面了)。
但也有一些表面比较特殊。例如“麦比乌斯带”(请自己Google一下),可以全部使用“正面”或全部使用“背面”来表示。

可以通过glFrontFace函数来交换“正面”和“反面”的概念。
如果不写该函数 默认  glFrontFace(GL_CCW);
glFrontFace(GL_CCW);  // 设置CCW方向为“正面”,CCW即CounterClockWise,逆时针
glFrontFace(GL_CW);   // 设置CW方向为“正面”,CW即ClockWise,顺时针
将glFrontFace(GL_CCW)修改为glFrontFace(GL_CW),结果如下

OpenGL(五)多边形

相关标签: OpenGL opengl

上一篇:

下一篇: