c++ - 改变三角形的颜色

标签 c++ directx shader directx-11

对 DirectX 非常非常陌生,试图把本教程弄得一团糟,我必须了解它是如何工作的。弄清楚是什么控制了它绘制的三角形的颜色,我发现它非常奇怪。

原因如下: - 当我改变变量(这是一个 float )左边的数字时,什么都没有发生。我可以将它更改为 40000000 或 4 或 3 或 400000000 或 10 或 9 没有任何变化。

-当我将变量从正变为负时,反之亦然,它确实改变了颜色。

-当我将任何变量更改为 0.0f 时,它会更改颜色。

所以我真的想弄清楚这其中的逻辑,我的意思是,变量号怎么可能不影响它的颜色值?这里有一些代码,希望能让我的问题更有意义。

SimpleVertexShader.hlsl

 float4 SimplePixelShader(PixelShaderInput input) : SV_TARGET
    {
        // Draw the entire triangle yellow.
        return float4(4.0f, 0.0f, 2.0f, 6.0f);
    }

main.cpp

auto vertexShaderBytecode = reader->ReadData("SimpleVertexShader.cso");
        ComPtr<ID3D11VertexShader> vertexShader;
        DX::ThrowIfFailed(
            m_d3dDevice->CreateVertexShader(
                vertexShaderBytecode->Data,
                vertexShaderBytecode->Length,
                nullptr,
                &vertexShader
                )
            );

最佳答案

return float4(4.0f, 0.0f, 2.0f, 6.0f);

你返回的是像素颜色,颜色的有效输入范围是[0.0 - 1.0],如果值超出这个范围,它将被截断到这个范围

for values < 0.0, it was treated as 0
for values > 1.0, it was treated as 1

这就是为什么当你更新大于 1.0 的值时你没有看到任何变化

关于c++ - 改变三角形的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22597701/

相关文章:

c++ - 在 C++ 中将 float 的文本文件读入二维 vector

c++ - 不同的窗体

android - 在 Android 上使用 GL_OES_get_program_binary(编译着色器)

video - 桌面输出顶部的像素/顶点着色器

c++ - 这些哪个更快?

c++ - QDialogs 中是否需要析构函数?

c++ - DirectX 11 : how to define input layout when using more than one vertex buffer?

opengl - 使用 Cg 的 OpenGL 中的多个渲染目标

java - 如何从旧实例创建新实例?

c++ - 在两个不同的类中包含相同的头文件