小编Fra*_*era的帖子

GLSL的GPU皮肤问题

我一直在使用openGL几个月,现在我自己学习它.现在我已经开始渲染位置,纹理坐标模型

我正在尝试使用动画模型,我将在显卡上进行动画蒙皮过程.

顺便说一句,如果有人想帮我1对1让我知道我不介意更直接的方法.

这是我的顶点格式

struct VERTEX_ANIMATED
{
    float3 position;
    float3 normal;
    float2 texCoord;
    float weights[4];
    unsigned boneIndices[4];
};
Run Code Online (Sandbox Code Playgroud)

这就是我将我的顶点添加到gpu缓冲区句柄的方法(这些函数中的任何未初始化的变量都位于".h"中)

bool CVertexBuffer::IncreaseVerts( const unsigned int uiNumVerts )
{
    //create our increase by value
    unsigned uiIncrement = (uiNumVerts / BUFFER_INCREASE_SIZE) * BUFFER_INCREASE_SIZE + BUFFER_INCREASE_SIZE;
    m_uiNumVerts += uiIncrement;

    //bind to our buffer
    void* buffer1; 
    if (GLEW_ARB_vertex_shader)
    {
        glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_uiVertBufferHandle );

        //make sure our buffer exists
        buffer1 = glMapBufferARB( GL_ARRAY_BUFFER_ARB, GL_READ_WRITE );
    }
    else
    {
        glBindBuffer( GL_ARRAY_BUFFER, m_uiVertBufferHandle );

        //make sure our buffer …
Run Code Online (Sandbox Code Playgroud)

opengl shader gpu glsl

5
推荐指数
1
解决办法
1205
查看次数

如何使用 OpenGL 渲染多个纹理?

这是我对渲染多个纹理的基本步骤的理解。

1) 绑定要渲染的着色器位置

m_uihDiffuseMap = glGetUniformLocation( m_iShaderProgramHandle, "diffuseMap" );

if( m_uihDiffuseMap != -1 )
    glUniform1i( m_uihDiffuseMap, 0 );

m_uihNormalMap = glGetUniformLocation( m_iShaderProgramHandle, "normalMap" );

if( m_uihNormalMap != -1 )
    glUniform1i( m_uihNormalMap, 1 );
Run Code Online (Sandbox Code Playgroud)

2)绑定到你想要渲染的内容

glBindFramebuffer( GL_FRAMEBUFFER, m_uifboHandle );

//diffuse texture binding
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_uiTextureHandle1, 0);

//normal texture binding
                                   (or GL_COLOR_ATTACHMENT1)
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0+1, m_uiTextureHandle2, 0);
Run Code Online (Sandbox Code Playgroud)

3)清除缓冲区并指定要绘制到的缓冲区

glClearColor( 1.0f, 1.0f, 1.0f, 1.0f );
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

GLenum buffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 };
glDrawBuffers(2, buffers);
Run Code Online (Sandbox Code Playgroud)

4) 设置着色器程序进行渲染

glUseProgram( m_uiShaderProgramHandle ); …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glsl render-to-texture fragment-shader

5
推荐指数
1
解决办法
3725
查看次数

OpenGL矩阵VS DirectX矩阵

我只处理过DirectX矩阵

我读过的文章说你不能将OpenX矩阵数学库用于openGL矩阵.

但我也读过,如果你的数学是一致的,你可以得到相似的结果.这让我更加困惑.

任何人都可以开导我吗?或者如果你不能在openGL矩阵上使用DirectX数学.有谁知道一个好的openGL矩阵库?

任何帮助,了解他们的差异和数学知识将不胜感激.

opengl math directx matrix

4
推荐指数
1
解决办法
1932
查看次数

glMapBuffer 不断返回 0x00000000

我已经初始化了 glewInit( ) 和任何其他 openGL 东西。所有这些都是在我拨打这些电话之前进行的。

  glGenBuffers( 1, &m_uiVertBufferHandle );
  glBindBuffer( GL_ARRAY_BUFFER, m_uiVertBufferHandle );
  glBufferData( GL_ARRAY_BUFFER, 0, 0, GL_READ_WRITE );
  glBindBuffer( GL_ARRAY_BUFFER, 0 );
Run Code Online (Sandbox Code Playgroud)

这就是我创建缓冲区对象的方式,ii 执行了 glBufferData,因为我在 openGL 文章中读到,如果您不至少调用一次它,则根本没有任何存储空间,这将使 glMapBuffer 总是给您 0x00000000。

稍后我调用 glMapBuffer 来获取我的存储位置以开始保存数据,当我使用 glMapBuffer 时我这样称呼它

void* buffer1; 
glBindBuffer( GL_ARRAY_BUFFER, m_uiVertBufferHandle );

//make sure our buffer excists
buffer1 = glMapBuffer( GL_ARRAY_BUFFER, GL_READ_WRITE );
Run Code Online (Sandbox Code Playgroud)

我的 buffer1 中总是得到 0x00000000。为什么是这样?我发现的唯一两个原因是我没有正确初始化 glewInit (我已经完成了)并且我没有至少调用一次 glBindBufferData 。

opengl vbo vertex-buffer vertex

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

如何渲染到OpenGL Cubemap纹理的一面

我正在制作一个立方体贴图渲染目标类。我已经有一个2D的作品了。但是对于这个立方体贴图渲染目标类,我希望能够根据需要渲染到特定的面孔。也许我想在“ X +”面上渲染圆,但在“ Y +”面上渲染三角形。

这是我班的样子

class CRenderTarget 
{
private:
    //frame buffer to render on
    unsigned  m_uifboHandle;

    //depth stencil 
    unsigned  m_uiDepthStencilHandle;

    //the texture we will render on
    unsigned  m_uiTextureHandle;

public:
    CCubeRenderTarget( void );

    ~CCubeRenderTarget( void );

    void Create( unsigned uiHeightWidth = 512,
             int iInternalFormat = 0x1908 ); //GL_RGBA

    void Bind( void );

    void UnBind( void );
}
Run Code Online (Sandbox Code Playgroud)

这就是我的create函数的样子

void Create( unsigned uiHeightWidth, int iInternalFormat )
{
        //generate our variables
    glGenFramebuffers(1, &m_uifboHandle);
    glGenRenderbuffers(1, &m_uiDepthStencilHandle);
    glGenTextures(1, &m_uiTextureHandle);

    // Initialize FBO
    glBindFramebuffer( GL_FRAMEBUFFER, …
Run Code Online (Sandbox Code Playgroud)

opengl framebuffer rendertarget

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

为什么我不能用这个其他类的函数填充这个类的函数指针

现在一个类的函数指针到另一个类的函数怎么样?那是我的问题

例:

class Apple
{
   int(Apple::*pActionFunc)(void);
};

class Tree
{
   Apple* tempy;

   void Init( void );

   int I_Work( void );
};

void Tree::Init( void )
{
  tempy = new Apple( );
  tempy->pActionFunc = &Tree::I_Work;
}

int Tree::I_Work( void )
{
   "Do Things"
}
Run Code Online (Sandbox Code Playgroud)

那样不行.这是为什么?

c++ pointers function-pointers class

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