在GLSL中计算点后绘制三角形
Drawing triangles after calculating points in GLSL
我有一项任务要在OpenGL中准备一个hipsomemetric地球仪。除了顶点的颜色之外,我还需要一些顶点更高(山),一些更低。
目前,我有一个程序,它生成一个地球仪,只有点(每1度),都在同一高度上,我通过将纬度和经度传递给GLSL中的程序来实现这一点,它计算每个顶点的平移矩阵。
现在,我可以很容易地想象如何将顶点移动得更高和更低-我只需添加另一个统一的变量"高度",然后在GLSL中我将完成其余的操作。同样简单的事情是传递颜色-没有问题。
然而,我不知道如何使用三角形(好吧,由两个三角形组成的四边形)创建整个地图。我拥有的最好的解决方案是,当我有四个顶点(x1,x2,x3,x4)创建一个四边形时,我可以用这种方式变换一个四边形状(以前在缓冲区中),以生成一个在我的四个顶点中有角的四边形(x1,x2,x3,x4)。然后,我只需将其传递给GLSL并进行渲染。
然而,我不知道如何变换一个四边形来创建一个顶点中有角的新四边形。有可能吗?或者可能是另一个想法如何实现这个四边形?
其他信息:
我使用的是OpenGL 3.3。
这就是我渲染点的方式:
for (double lng = 0; lng < 360; lng++) {
for (double lat = 0; lat < 180; lat++) {
draw_dots(MVP, lat, lng);
}
}
// draw_dots function:
glUniform1f(latID, lat);
glUniform1f(lngID, lng);
glUniformMatrix4fv(MatrixID, 1, GL_FALSE, &MVP[0][0]);
glDrawElements(GL_POINTS, 1, GL_UNSIGNED_INT, field1_location);
这是我的顶点着色器:
gl_Position = MVP * transl_mtx * vec4(vertexPosition_modelspace, 1);
其中transl_mtx是由统一变量"lat"answers"lng"计算的平移矩阵。
不,不,Nope。
GPU渲染通常最大的性能打击是CPU-GPU同步点。因此,您通常希望将每帧的命令数量减少到绝对最小值。我们唯一不能删除的函数是绘制调用;通常为CCD_ 1或CCD_。
但是,您在每帧调用此函数数千次。考虑到你的GPU(很可能)有几GB的内存,这里有一个更好的解决方案:
- 将整个顶点集离线生成为常规浮点数组
- 通过VBO将其复制到GPU
- 使用
in
变量而不是uniform
,并且仅通过均匀传递MVP矩阵 - 只需使用一个drawcall即可渲染整个模型
这样你就可以在CPU上方便地操作和准备数据一次,然后使用GPU的荒谬速度来绘制它。
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- OpenGL绘制三角形而不是正方形
- 为什么这个在 opengl 中绘制三角形的着色器没有多次运行
- 使用 glDrawArray 函数绘制三角形
- GLFW程序不绘制三角形
- OpenGL不会绘制三角形,遵循确切的格式
- 用OpenGL绘制三角形
- 绘制三角形时只有空白屏幕
- OpenGL绘制三角形只有白色
- 计算机图形:我自己绘制三角形
- 如何使用OSG API在Osgearth上绘制三角形
- 用QT3D绘制三角形
- OpenGL不绘制三角形
- OpenGL拒绝绘制三角形
- 在GLSL中计算点后绘制三角形
- 使用OpenGL绘制三角形:如何使用两个类进行管理
- 为什么当我添加绘制三角形的代码时形状变得隐藏
- Direct3D 11 - 绘制三角形
- 无法使用 Opengl 绘制三角形
- 在DirectX 9中使用可扩展数组绘制三角形