小编2am*_*2am的帖子

为什么我们必须在渲染过程中清除OpenGL中的深度缓冲区?

我试图运行一个OpenGL代码,它没有在glClear()中清除GL_DEPTH_BUFFER_BIT,因为我无法渲染我的场景.我添加了这个位,然后渲染了场景.为什么有必要使用这个清除位?

我可能知道这个的原因,以清除之前GPU使用的深度缓冲区值,但我只是想确认一下.

c++ opengl depth-buffer

10
推荐指数
1
解决办法
5187
查看次数

freetype预装在Mac上吗?

我对Mac OS X环境比较陌生.我试图安装freetype库来在OpenGL中显示文本,但我失败了.我在一些论坛上看到freetype预装了Mac OS X山狮.我只是想证实这一点.如果它确实带有Mac,那么我如何将它包含在我的项目中呢?如果Mac没有附带,那么在Mac中安装freetype会有什么理想的第一步呢?

opengl macos freetype2

7
推荐指数
1
解决办法
1万
查看次数

如何在曲面细分期间计算gl_TessCoord?

目前我正在学习OpenGL的曲面细分着色器.但是当涉及曲面细分评估着色器中的内置变量"gl_TessCoord"时,我无法理解它是如何计算的.

我知道当使用不同的镶嵌模式(四边形或三角形)时,"gl_TessCoord"是不同的.我检查了蓝皮书和红皮书,但他们只给出了一个粗略的解释,告诉它代表输入顶点的权重.有任何想法吗?

以下是矩形曲面细分的示例代码:

#version 430 core
layout ( quads) in;
void main( void)
{
    // Interpolate along bottom edge using x component of the
    // tessellation coordinate
    vec4 p1 = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);
    // Interpolate along top edge using x component of the
    // tessellation coordinate
    vec4 p2 = mix(gl_in[2].gl_Position, gl_in[3].gl_Position, gl_TessCoord.x);
    // Now interpolate those two results using the y component
    // of tessellation coordinate
    gl_Position = mix(p1, p2, gl_TessCoord.y);
}
Run Code Online (Sandbox Code Playgroud)

以下是三角形曲面细分的示例代码:

#version 430 core
layout ( triangles) in; …
Run Code Online (Sandbox Code Playgroud)

opengl glsl jogl

3
推荐指数
1
解决办法
1170
查看次数

使用NDK for Android编写OpenGL代码

所以这里是交易。我在 Windows [Win32] 上使用 OpenGL API 已经大约 3 年了。我在同一个中编写了多个着色器。

现在我想将我的项目移植到Android 上。我的问题是,如果我想使用 C++ [NDK] 编写项目,并使用 OpenGL ES 是否可以?

我得到的简短回答是“是”,但是,这是正确的方法吗?我使用 Java 会更好吗?因为我正在使用 NDK,所以性能是否会下降,因为我的目标是基于 VR 的 OpenGL 应用程序性能是主要因素?

是的,这是多个问题,但它们指出了类似的问题,即在现实项目中使用 NDK 是否实用。

c++ android opengl-es android-ndk

3
推荐指数
1
解决办法
1754
查看次数

WM_KEYDOWN如何处理不同的密钥?

这是一个相当不寻常的问题,但我需要解释Win32如何处理不同的keydown事件.

WM_KEYDOWN当你想要接受长按时使用,例如,如果你在游戏中,并且你想要向前移动,你按向上箭头键或'W'键,游戏中的角色继续前进.您不必多次按键,因为WM_KEYDOWN.

我有一个基于win32的3D OpenGL应用程序,我在其中使用'WASD'并arrow key在3D世界中移动.他们都完全按照自己的工作方式工作.

据说,当我进入3D世界时,我可以感觉到Win32处理方式WASD和箭头键之间存在细微差别.

    case UP_k: 
    f_zPosition-=CAM_MOVEMENT_SPEED; 
     break; 
Run Code Online (Sandbox Code Playgroud)

相同的代码也用于case 'W':.

但是在游戏中,由于某种原因,箭头键所做的移动比WASD键的移动要平滑得多.

  1. Win32如何在内部处理这些事件?
  2. 如何通过WASD箭头键平滑地进行移动.

我想知道是否有人在Win32中注意到这一点,这是我的事件循环代码,根据评论中的要求.

do
{
    window.displayGL();
    PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
    TranslateMessage(&msg);
    DispatchMessage (&msg);

}while(msg.message != WM_QUIT);
Run Code Online (Sandbox Code Playgroud)

c++ opengl winapi game-engine

2
推荐指数
1
解决办法
986
查看次数

为什么我的OpenGL纹理透明?

我在OpenGL中有一个地形,我使用GLSL mix()函数组合了两个纹理.这是我正在使用的纹理. 在此输入图像描述

现在我能够组合和混合这两个纹理,但出于某种原因,当我在地形上渲染纹理时,地形变得透明.我先渲染LHS纹理,然后用alpha通道渲染RHS纹理,我不明白为什么它是透明的.

在此输入图像描述 这是一个有趣的事实,在截图中,你可以看到在Nvidia GPU上渲染时的地形结果,当我在interl HD 3k上渲染相同的东西时,我得到了不同的结果.这个结果是它应该如何,在下面的截图中没有任何透明.

在此输入图像描述

这是我的片段着色器代码..

void main() 
{
vec4 dryTex   = texture( u_dryTex, vs_texCoord *1 );
vec4 grassTex = texture( u_grassTex, vs_texCoord *1 );
vec4 texColor1= mix(dryTex, grassTex , grassTex.a);   
out_fragColor = texColor1;
}
Run Code Online (Sandbox Code Playgroud)

c++ opengl textures glsl texture-mapping

0
推荐指数
1
解决办法
124
查看次数