从零开始的openGL--cs游戏(9)CubeMeshComponent,一个正方形物体------------第一个页面完成

CubeMeshComponent

#ifndef CubeMeshComponent_H
#define CubeMeshComponent_H
#include"Component.h"
#include"Shader.h"
class CubeMeshComponent :public Component
{
    
    
public:
	float length, width, height;
	unsigned int cubeVAO;
	unsigned int cubeVBO;
	float* cubeVertices;
	CubeMeshComponent(GameObject* gameObject);
	void SetShader(Shader& shader);
	void SetBound(float length, float width, float height);
	void Update()override;
	void LateUpdate()override;
	void Render()override;
private:
	Shader* _shader;
};
#endif
-----------------------------------
#include "CubeMeshComponent.h"
#include "ResourceManager.h"
#include "GameObject.h"

CubeMeshComponent::CubeMeshComponent(GameObject* gameObject) :Component(gameObject)
{
    
    
    SetName("CubeMeshComponent");
}

void CubeMeshComponent::SetShader(Shader& shader)
{
    
    
    _shader = &shader;
}

void CubeMeshComponent::SetBound(float length, float width, float height)
{
    
    
    ResourceManager::GetShader("CubeShader").Use();
    float v[]{
    
    
        // positions          // texture Coords
        -0.5f, -0.5f, -0.5f, 0.0f, 0.0f,
        0.5f, -0.5f, -0.5f, 1.0f, 0.0f,
        0.5f, 0.5f, -0.5f, 1.0f, 1.0f,
        0.5f, 0.5f, -0.5f, 1.0f, 1.0f,
        -0.5f, 0.5f, -0.5f, 0.0f, 1.0f,
        -0.5f, -0.5f, -0.5f, 0.0f, 0.0f,

        -0.5f, -0.5f, 0.5f, 0.0f, 0.0f,
        0.5f, -0.5f, 0.5f, 1.0f, 0.0f,
        0.5f, 0.5f, 0.5f, 1.0f, 1.0f,
        0.5f, 0.5f, 0.5f, 1.0f, 1.0f,
        -0.5f, 0.5f, 0.5f, 0.0f, 1.0f,
        -0.5f, -0.5f, 0.5f, 0.0f, 0.0f,

        -0.5f, 0.5f, 0.5f, 1.0f, 0.0f,
        -0.5f, 0.5f, -0.5f, 1.0f, 1.0f,
        -0.5f, -0.5f, -0.5f, 0.0f, 1.0f,
        -0.5f, -0.5f, -0.5f, 0.0f, 1.0f,
        -0.5f, -0.5f, 0.5f, 0.0f, 0.0f,
        -0.5f, 0.5f, 0.5f, 1.0f, 0.0f,

        0.5f, 0.5f, 0.5f, 1.0f, 0.0f,
        0.5f, 0.5f, -0.5f, 1.0f, 1.0f,
        0.5f, -0.5f, -0.5f, 0.0f, 1.0f,
        0.5f, -0.5f, -0.5f, 0.0f, 1.0f,
        0.5f, -0.5f, 0.5f, 0.0f, 0.0f,
        0.5f, 0.5f, 0.5f, 1.0f, 0.0f,

        -0.5f, -0.5f, -0.5f, 0.0f, 1.0f,
        0.5f, -0.5f, -0.5f, 1.0f, 1.0f,
        0.5f, -0.5f, 0.5f, 1.0f, 0.0f,
        0.5f, -0.5f, 0.5f, 1.0f, 0.0f,
        -0.5f, -0.5f, 0.5f, 0.0f, 0.0f,
        -0.5f, -0.5f, -0.5f, 0.0f, 1.0f,

        -0.5f, 0.5f, -0.5f, 0.0f, 1.0f,
        0.5f, 0.5f, -0.5f, 1.0f, 1.0f,
        0.5f, 0.5f, 0.5f, 1.0f, 0.0f,
        0.5f, 0.5f, 0.5f, 1.0f, 0.0f,
        -0.5f, 0.5f, 0.5f, 0.0f, 0.0f,
        -0.5f, 0.5f, -0.5f, 0.0f, 1.0f
    };
    glGenVertexArrays(1, &cubeVAO);
    glGenBuffers(1, &cubeVBO);
    glBindVertexArray(cubeVAO);
    glBindBuffer(GL_ARRAY_BUFFER, cubeVBO);
    glBufferData(GL_ARRAY_BUFFER, sizeof(v), &v, GL_STATIC_DRAW);
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)0);
    glEnableVertexAttribArray(1);
    glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float)));
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    glBindVertexArray(0);
}

void CubeMeshComponent::Update()
{
    
    
}

void CubeMeshComponent::LateUpdate()
{
    
    
}

void CubeMeshComponent::Render()
{
    
    
    glm::mat4 a = gameObject->transform->worldTransformMat;
    ResourceManager::GetShader("CubeShader").SetMatrix4("model", a ,true);
    glBindVertexArray(cubeVAO);
    glDrawArrays(GL_TRIANGLES, 0, 36);
    glBindVertexArray(0);
}


Vs代码

#version 330 core
layout(location = 0) in vec3 aPos;
layout(location = 1) in vec2 aTexCoord;
layout(std140) uniform PV
{
    
    
	mat4 projection;
	mat4 view;
};
out vec2 TexCoord;

uniform mat4 model;

void main()
{
    
    
	gl_Position = projection * view * model * vec4(aPos, 1.0);
	TexCoord = vec2(aTexCoord.x, aTexCoord.y);
}

FS代码

#version 330 core
layout(location = 0) in vec3 aPos;
layout(location = 1) in vec2 aTexCoord;
layout(std140) uniform PV
{
    
    
	mat4 projection;
	mat4 view;
};
out vec2 TexCoord;

uniform mat4 model;

void main()
{
    
    
	gl_Position = projection * view * model * vec4(aPos, 1.0);
	TexCoord = vec2(aTexCoord.x, aTexCoord.y);
}

第一个页面

请添加图片描述

猜你喜欢

转载自blog.csdn.net/qq_41041725/article/details/121912864
今日推荐