小编use*_*291的帖子

3D对象以看起来像2D对象的方式着色

我正在使用以下着色器源代码来实现顶点和片段.

顶点着色器源:

#define highp
attribute highp vec3 position;
uniform highp mat4 mvp;
void main(void)
{
    gl_Position = mvp * vec4(position, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

片段着色器源:

#define highp
uniform highp vec3 color;
void main(void)
{
    gl_FragColor = vec4(color, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

但是,着色器无法正常工作.如下面的屏幕截图所示,3D对象的颜色就像2D对象一样:

3D对象的颜色类似于2D对象


glGetShaderiv带有GL_COMPILE_STATUS返回success == TRUE,因此没有着色器编译错误.

glGetShaderiv(shaderObj, GL_COMPILE_STATUS, &success);
Run Code Online (Sandbox Code Playgroud)

我没有尝试glGetError()代码.我要去尝试一下.但我怀疑我没有收到任何OpenGL错误.


我相信我需要调整color顶点和片段着色器.我应该如何调整着色器源中的颜色?任何人都可以通过暗示来帮助我.到目前为止,我无法通过修改源来解决问题.


UPDATE

在@ Rabbid76 的帮助下,3D对象看起来很不错:

3D对象现在看起来不错:)

我正在使用@ Rabbid76代码进行一些小修改:将#version 130顶点和片段着色器源添加到顶部.看起来我的英特尔显卡需要该#version 130指令,否则会引发一些警告和错误:

警告:片段着色器中不支持扩展"GL_OES_standard_derivative"

#version 130指令解决了上述警告及其后续错误.

shader lighting opengl-es glsl fragment-shader

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

必须做FreeLibrary 2次,虽然我只做了一次LoadLibrary.此外,卸载DLL后,尝试再次加载时,会发生错误

有以下C#代码用于加载和卸载C++ DLL.

我只加载DLL一次,但代码必须卸载DLL 2次.在卸载DLL之后,当我再次加载它,并且我调用DLL的导出函数时,我收到以下错误消息:

尝试读取或写入受保护的内存.这通常表明其他内存已损坏.

DLL依赖于其他DLL.

    /// //////////////handle of FDD DLL:
    System.IntPtr SystemIntPtr_handle_of_DLL=System.IntPtr.Zero;

    private void button4_Click(object sender, EventArgs e)
    {
        try
        {
            string string_Dependency_path = ".\\DLL_Dependencies\\";
            Call_DLL.SetDllDirectory(string_Dependency_path);
            SystemIntPtr_handle_of_DLL = Call_DLL.LoadLibrary("DLL.dll");
            if (SystemIntPtr_handle_of_DLL == System.IntPtr.Zero) { throw new Exception("DLL did not load"); }

        }
        catch (Exception Exception_Object) { MessageBox.Show(Exception_Object.Message); }
    }

    private void button5_Click(object sender, EventArgs e)
    {
        try
        {
            int int_FreeLibrary_counter = 0;
            while (Call_DLL.FreeLibrary(SystemIntPtr_handle_of_DLL))
            {
                int_FreeLibrary_counter++;
            }
            MessageBox.Show("DLL unloaded. You will have to load it again. (Unloaded" + int_FreeLibrary_counter …
Run Code Online (Sandbox Code Playgroud)

c# c++ dll pinvoke loadlibrary

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

不明白Qt&符号和按位AND操作:if(ev-> buttons()&Qt :: RightButton)

我有以下代码:

void OpenGLRenderer::mouseMoveEvent(QMouseEvent *ev)
{
    //...

    if(ev->buttons() & Qt::RightButton)
    {
        if(ev->modifiers() & Qt::ShiftModifier)
        {
            // ...
        }
        else
        {
            // ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白&符号的&比较是如何起作用的.这是&一个有点明智的AND操作吗?该声明如何ev->buttons() & Qt::RightButton运作?

c++ qt

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

reinterpret_cast意外地将类型从const float *更改为float

我有一个指针:

const float  *m_posBufferPtr_float;
Run Code Online (Sandbox Code Playgroud)

我分配给此变量:

m_posBufferPtr_float = reinterpret_cast<const float *>(buffer()->data().constData());
Run Code Online (Sandbox Code Playgroud)

在哪个constData()函数返回const char *类型:

inline const char *QByteArray::constData() const
{ return d->data(); }
Run Code Online (Sandbox Code Playgroud)

因此,我reinterpret_cast 应该转换const char *const float *


但是令我惊讶的是,恰好 reinterpret_cast我的指针之前

之前

并且恰好 reinterpret_cast调试器显示我的指针为:

后


我想知道为什么reinterpret_cast要转换const char *float而不是const float *

c++ qt reinterpret-cast

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

位移位 &lt;&lt; 和乘法 * 优先级

在 Go Playground 上尝试了以下代码:

package main

import (
    "fmt"
)

func main() {
    log2Dim := uint32(9)
    
    SIZE := 1 << 3 * log2Dim
    fmt.Printf("Result: %v\n", SIZE)
    
    SIZE = 1 << (3 * log2Dim)            // => only difference: adding ( )
    fmt.Printf("Result: %v\n", SIZE)
}
Run Code Online (Sandbox Code Playgroud)

这是打印出来的:

Result: 72
Result: 134217728
Run Code Online (Sandbox Code Playgroud)

为什么仅仅添加包含and操作的( )语句就会产生巨大的差异?<<*

据此*具有更高的优先级,这<<是Google搜索bitshift优先级golang的第一个结果。

go operator-precedence

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