raylib貌似不自带光照,还要自己写
可以参考官方光照示例
先来一打非常简单的着色器
顶点属性名最好按照官方wiki上写的,编译时raylib会自动加载
4.vert
#version 330
layout(location=0)in vec3 vertexPosition;
layout(location=1)in vec3 vertexNormal;
layout(location=2)in vec4 vertexColor;
out vec3 fragPosition;
out vec3 fragNormal;
out vec3 fragColor;
uniform mat4 mvp;
uniform mat4 matModel;
void main()
{
gl_Position = mvp * vec4(vertexPosition,1.0);
fragPosition = vec3(matModel * vec4(vertexPosition,1.0));
fragNormal = vec3(matModel * vec4(vertexNormal,1.0));
fragColor = vec3(vertexColor);
}
4.frag
#version 330
in vec3 fragPosition;
in vec3 fragNormal;
in vec3 fragColor;
out vec4 finalColor;
uniform vec3 u_color;
uniform vec3 u_cameraposition;
void main()
{
finalColor = vec4(u_color,1.0);
}
03.cpp
#include运行结果#include #include int main() { //把角度转换为弧度 auto toRad = [](float deg) { return (deg * 3.1415f / 180.0f); }; //初始化窗口 InitWindow(500, 500, ""); SetTargetFPS(60); //初始化相机 Camera3D camera; camera.fovy = 60.0f; camera.position = {5, 5, 5}; camera.projection = CameraProjection::CAMERA_PERSPECTIVE; camera.target = {0, 0, 0}; camera.up = {0, 1, 0}; UpdateCamera(&camera); float angle = 0.0f; //加载着色器 Shader shader = LoadShader("resources/4.vert", "resources/4.frag"); //让raylib填充相机位置(???) shader.locs[SHADER_LOC_VECTOR_VIEW] = GetShaderLocation(shader, "u_cameraposition"); //获取u_color的位置 int u_color = GetShaderLocation(shader, "u_color"); //加载模型 Model cube = LoadModel("resources/cube.obj"); //设置着色器 cube.materials[0].shader = shader; //颜色 float red[] = {1, 0, 0}; Model sphere = LoadModel("resources/sphere.obj"); sphere.materials[0].shader = shader; float green[] = {0, 1, 0}; Model annulus = LoadModel("resources/annulus.obj"); annulus.materials[0].shader = shader; float blue[] = {0, 0, 1}; while (!WindowShouldClose()) { BeginDrawing(); { ClearBackground(BLACK); //移动相机 const float radius = sqrt(5 * 5 + 5 * 5); float x = cos(toRad(angle)) * radius; float z = sin(toRad(angle)) * radius; camera.position = {x, 5, z}; UpdateCamera(&camera); angle += 1.0f; if (angle >= 360.0f) angle -= 360.0f; BeginMode3D(camera); { DrawGrid(10, 1); //启用着色器 BeginShaderMode(shader); { //设置颜色 SetShaderValue(shader, u_color, red, SHADER_UNIFORM_VEC3); //绘制模型 DrawModel(cube, Vector3{0, 0, 2}, 1, BLACK); SetShaderValue(shader, u_color, green, SHADER_UNIFORM_VEC3); DrawModel(sphere, Vector3{-2, 0, -2}, 1, BLACK); SetShaderValue(shader, u_color, blue, SHADER_UNIFORM_VEC3); DrawModel(annulus, Vector3{2, 0, -2}, 1, BLACK); } EndShaderMode(); } EndMode3D(); DrawFPS(0, 0); } EndDrawing(); } //清空资源 UnloadShader(shader); UnloadModel(cube); UnloadModel(sphere); UnloadModel(annulus); //关闭窗口 CloseWindow(); return 0; }


![[C++] [Raylib] 着色器 [C++] [Raylib] 着色器](http://www.mshxw.com/aiimages/31/1018270.png)
