You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者백승호

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:40:50