OpenGL如何修改顶点信息实现三角形缩放?
实现三角形的缩放功能
你不需要修改C++中传入的in_Position原始顶点数据,直接在GLSL里新增一个缩放用的uniform变量就能搞定,和你用move实现位移的思路一致:
1. 修改vertex.glsl代码
添加一个uniform vec3 scale变量,然后在计算最终位置时,先对原始顶点坐标做缩放运算,再叠加位移:
#version 330 layout (location = 0) in vec3 in_Position; //--- 위치 변수: attribute position 0 uniform vec3 move; uniform vec3 scale; // 新增缩放变量 void main(void) { // 先缩放原始顶点,再加上位移 vec3 scaledPos = in_Position * scale; gl_Position = vec4(scaledPos.x + move.x, scaledPos.y + move.y, scaledPos.z + move.z, 1.0); }
2. 在C++代码中设置缩放变量
和你设置move变量的逻辑完全一样:
- 先通过
glGetUniformLocation获取scale变量的位置 - 然后用
glUniform3f传入缩放因子,比如想让三角形在XY平面放大2倍,就传2.0f, 2.0f, 1.0f;缩小到0.5倍就传0.5f, 0.5f, 1.0f
示例代码片段:
// 假设你已经有了程序对象programID GLint scaleLoc = glGetUniformLocation(programID, "scale"); // 设置XY方向放大2倍,Z方向不变 glUniform3f(scaleLoc, 2.0f, 2.0f, 1.0f);
注意事项
- 运算顺序要注意:先缩放原始顶点,再叠加位移。如果反过来,位移量也会被缩放,导致位置偏移不符合预期。
- 如果需要等比例缩放,只需要让scale的x、y、z值保持一致就行。
内容的提问来源于stack exchange,提问作者백승호
相关产品推荐
相关产品推荐

