gpt4 book ai didi

opengl - 如何实现广告牌?

转载 作者:行者123 更新时间:2023-12-03 16:01:45 24 4
gpt4 key购买 nike

我目前在 3D 世界中绘制一个平面(三角形条)。我现在想把它画成一个广告牌 - 所以脸部与相机对齐。

这是代码:

#version 330 core

layout(points) in;
layout(triangle_strip, max_vertices=4) out;
out vec2 tex_coord;

uniform mat4x4 model;
uniform mat4x4 view;
uniform mat4x4 projection;

uniform float size = 1.0;

// texture coordinates
const vec2 texc[4] = vec2[] (vec2(0, 0),
vec2(0, 1),
vec2(1, 0),
vec2(1, 1));

void main() {
// vertex offsets from the center point
float asize = size / 2;
vec4 offset[4] = vec4[] (vec4(-asize, 0.0, -asize, 0.0),
vec4(-asize, 0.0, asize, 0.0),
vec4( asize, 0.0, -asize, 0.0),
vec4( asize, 0.0, asize, 0.0));
int i, j;
for(i = 0; i < gl_in.length(); ++i) {
for(j = 0; j < 4; ++j) {

// vector coordinates
vec4 vertexpos = (gl_in[i].gl_Position + offset[j]);
vec4 position = projection * view * model * vertexpos;
gl_Position = position;

tex_coord = texc[j];
EmitVertex();
}
EndPrimitive();
}
}

显然输出只是一个平面:

enter image description here

必须如何更改代码才能将飞机绘制为广告牌?我知道我必须使用 View 矩阵来计算顶点坐标(在内循环中),但我不知道如何计算。

最佳答案

添加 offset项目结束后 gl_in[i].gl_Position :

int i, j;
for(i = 0; i < gl_in.length(); ++i)
{
vec4 centerpt = projection * view * model * gl_in[i].gl_Position;
for(j = 0; j < 4; ++j)
{
gl_Position = centerpt + offset[j];
tex_coord = texc[j];
EmitVertex();
}
EndPrimitive();
}

关于opengl - 如何实现广告牌?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21945938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com