mirror of
https://github.com/ApfelTeeSaft/vb01.git
synced 2026-08-26 19:33:45 +00:00
implemented overlays and text, need depth configuration
This commit is contained in:
+4
-1
@@ -5,15 +5,18 @@ include_directories(/usr/include/GLFW)
|
||||
include_directories(/usr/include/glad)
|
||||
include_directories(/usr/include/glm)
|
||||
include_directories(/usr/include/assimp)
|
||||
include_directories(/usr/include/freetype2)
|
||||
|
||||
link_directories(/usr/lib/)
|
||||
|
||||
set(CMAKE_BUILD_TYPE Debug)
|
||||
set(gui text.cpp rectangle.cpp)
|
||||
set(utils util.cpp)
|
||||
set(math quaternion.cpp vector.cpp)
|
||||
set(render waterPlane.cpp particleEmitter.cpp camera.cpp light.cpp material.cpp mesh.cpp model.cpp node.cpp quad.cpp box.cpp root.cpp shader.cpp texture.cpp)
|
||||
|
||||
add_executable(vb01 main.cpp ${render} ${math} ${utils})
|
||||
add_executable(vb01 main.cpp ${render} ${math} ${utils} ${gui})
|
||||
target_link_libraries(vb01 glfw)
|
||||
target_link_libraries(vb01 glad)
|
||||
target_link_libraries(vb01 assimp)
|
||||
target_link_libraries(vb01 freetype)
|
||||
|
||||
@@ -2,6 +2,19 @@
|
||||
|
||||
namespace vb01{
|
||||
Box::Box(Vector3 size){
|
||||
this->staticVerts=false;
|
||||
|
||||
numTris=12;
|
||||
indices=new unsigned int[3*numTris];
|
||||
vertices=new Vertex[3*numTris];
|
||||
|
||||
setSize(size);
|
||||
|
||||
construct();
|
||||
}
|
||||
|
||||
void Box::setSize(Vector3 size){
|
||||
this->size=size;
|
||||
Vector3 pos[]={
|
||||
Vector3(size.x/2,size.y/2,size.z/2),
|
||||
Vector3(-size.x/2,size.y/2,size.z/2),
|
||||
@@ -47,9 +60,6 @@ namespace vb01{
|
||||
4,4,3, 6,4,1, 5,4,2,
|
||||
6,4,1, 4,4,3, 7,4,0
|
||||
};
|
||||
numTris=12;
|
||||
indices=new unsigned int[3*numTris];
|
||||
vertices=new Vertex[3*numTris];
|
||||
for(int i=0;i<3*numTris;i++){
|
||||
Vertex v;
|
||||
v.pos=pos[data[3*i]];
|
||||
@@ -58,6 +68,5 @@ namespace vb01{
|
||||
vertices[i]=v;
|
||||
indices[i]=i;
|
||||
}
|
||||
construct();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,9 @@ namespace vb01{
|
||||
class Box : public Mesh{
|
||||
public:
|
||||
Box(Vector3);
|
||||
void setSize(Vector3);
|
||||
private:
|
||||
Vector3 size;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
#version 330 core
|
||||
|
||||
in vec2 texCoords;
|
||||
|
||||
out vec4 FragColor;
|
||||
|
||||
uniform bool texturingEnabled;
|
||||
uniform vec4 diffuseColor;
|
||||
uniform sampler2D tex;
|
||||
|
||||
void main(){
|
||||
FragColor=texturingEnabled?texture(tex,texCoords):diffuseColor;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
#version 330 core
|
||||
|
||||
layout (location=0) in vec3 aVert;
|
||||
layout (location=2) in vec2 aTexCoords;
|
||||
|
||||
out vec2 texCoords;
|
||||
|
||||
uniform vec2 screen;
|
||||
|
||||
void main(){
|
||||
float x,y;
|
||||
x=(aVert.x-screen.x*.5)/(screen.x*.5);
|
||||
y=(screen.y*.5-aVert.y)/(screen.y*.5);
|
||||
gl_Position=vec4(x,y,0,1);
|
||||
texCoords=aTexCoords;
|
||||
}
|
||||
@@ -8,6 +8,7 @@
|
||||
#include"material.h"
|
||||
#include"model.h"
|
||||
#include"light.h"
|
||||
#include"text.h"
|
||||
#include<glm.hpp>
|
||||
#include"particleEmitter.h"
|
||||
|
||||
@@ -17,9 +18,11 @@ using namespace std;
|
||||
int main(){
|
||||
Root *root=Root::getSingleton();
|
||||
root->start(800,600);
|
||||
Node *rootNode=root->getRootNode(),*guiNode=root->getGuiNode();
|
||||
|
||||
Vector3 v1[]={Vector3(.2,.2,.2),Vector3(1,1,1)};
|
||||
Vector3 v2[]={Vector3(2,0,0),Vector3(-1,0,0)};
|
||||
string tex[]={"defaultTexture.jpg","woodChips.jpg"};
|
||||
|
||||
string t[]={
|
||||
"/home/dominykas/c++/FSim/left.jpg",
|
||||
@@ -35,20 +38,38 @@ int main(){
|
||||
Box *box=new Box(Vector3(1,1,1));
|
||||
Node *node=new Node(v2[i]);
|
||||
Material *mat=new Material();
|
||||
mat->addDiffuseMap("/home/dominykas/c++/FSim/defaultTexture.jpg");
|
||||
mat->addDiffuseMap("/home/dominykas/c++/FSim/"+tex[i]);
|
||||
mat->setLightingEnabled(false);
|
||||
mat->setTexturingEnabled(true);
|
||||
mat->setDiffuseColor(Vector4(0,0,1,1));
|
||||
box->setMaterial(mat);
|
||||
node->attachMesh(box);
|
||||
//root->getRootNode()->attachChild(node);
|
||||
rootNode->attachChild(node);
|
||||
}
|
||||
|
||||
Text *text =new Text("/home/dominykas/c++/FSim/batang.ttf","HI");
|
||||
text->setText("IH");
|
||||
Node *textNode=new Node(Vector3(400,100,0));
|
||||
textNode->addText(text);
|
||||
guiNode->attachChild(textNode);
|
||||
|
||||
Quad *quad=new Quad(Vector3(400,200,0),false);
|
||||
Node *quadNode=new Node(Vector3(0,0,0));
|
||||
Material *mat3=new Material(Material::MATERIAL_GUI);
|
||||
mat3->addDiffuseMap("/home/dominykas/c++/FSim/defaultTexture.jpg");
|
||||
mat3->setTexturingEnabled(true);
|
||||
mat3->setDiffuseColor(Vector4(1,0,0,.1));
|
||||
quad->setMaterial(mat3);
|
||||
quadNode->attachMesh(quad);
|
||||
guiNode->attachChild(quadNode);
|
||||
|
||||
ParticleEmitter *pe=new ParticleEmitter(100);
|
||||
Node *node2=new Node(Vector3(0,0,0));
|
||||
Material *mat2=new Material(Material::MATERIAL_PARTICLE);
|
||||
mat2->addDiffuseMap("/home/dominykas/c++/FSim/stern.jpg");
|
||||
pe->setMaterial(mat2);
|
||||
node2->attachParticleEmitter(pe);
|
||||
root->getRootNode()->attachChild(node2);
|
||||
Node *peNode=new Node(Vector3::VEC_ZERO);
|
||||
Material *peMat=new Material(Material::MATERIAL_PARTICLE);
|
||||
peMat->addDiffuseMap("/home/dominykas/c++/FSim/stern.jpg");
|
||||
pe->setMaterial(peMat);
|
||||
peNode->attachParticleEmitter(pe);
|
||||
rootNode->attachChild(peNode);
|
||||
|
||||
Camera *cam=Root::getSingleton()->getCamera();
|
||||
cam->setPosition(Vector3(0,0,-5));
|
||||
@@ -60,7 +81,7 @@ int main(){
|
||||
l1->setInnerAngle(glm::radians(40.));
|
||||
l1->setOuterAngle(glm::radians(60.));
|
||||
l1->setType(Light::POINT);
|
||||
//root->getRootNode()->addLight(l1);
|
||||
//rootNode->addLight(l1);
|
||||
while(true){
|
||||
root->update();
|
||||
}
|
||||
|
||||
+20
-7
@@ -18,6 +18,12 @@ namespace vb01{
|
||||
case MATERIAL_SKYBOX:
|
||||
shaderName="skybox.";
|
||||
break;
|
||||
case MATERIAL_GUI:
|
||||
shaderName="gui.";
|
||||
break;
|
||||
case MATERIAL_TEXT:
|
||||
shaderName="text.";
|
||||
break;
|
||||
}
|
||||
shader=new Shader(basePath+shaderName+"vert",basePath+shaderName+"frag");
|
||||
}
|
||||
@@ -26,12 +32,19 @@ namespace vb01{
|
||||
|
||||
void Material::update(){
|
||||
shader->use();
|
||||
if(type==MATERIAL_2D)shader->setBool(lightingEnabled,"lightingEnabled");
|
||||
for(Texture *t : diffuseMapTextures)
|
||||
t->select();
|
||||
for(Texture *t : normalMapTextures)
|
||||
t->select();
|
||||
for(Texture *t : specularMapTextures)
|
||||
t->select();
|
||||
if(type==MATERIAL_2D)
|
||||
shader->setBool(lightingEnabled,"lightingEnabled");
|
||||
shader->setBool(texturingEnabled,"texturingEnabled");
|
||||
if(texturingEnabled){
|
||||
for(Texture *t : diffuseMapTextures)
|
||||
t->select();
|
||||
for(Texture *t : normalMapTextures)
|
||||
t->select();
|
||||
for(Texture *t : specularMapTextures)
|
||||
t->select();
|
||||
}
|
||||
else{
|
||||
shader->setVec4(diffuseColor,"diffuseColor");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+12
-3
@@ -3,27 +3,36 @@
|
||||
|
||||
#include"shader.h"
|
||||
#include"texture.h"
|
||||
#include"vector.h"
|
||||
#include<vector>
|
||||
|
||||
namespace vb01{
|
||||
class Material{
|
||||
public:
|
||||
enum Type{MATERIAL_2D,MATERIAL_PARTICLE,MATERIAL_SKYBOX};
|
||||
enum Type{MATERIAL_2D,MATERIAL_PARTICLE,MATERIAL_SKYBOX,MATERIAL_GUI,MATERIAL_TEXT};
|
||||
|
||||
Material(Type=MATERIAL_2D);
|
||||
~Material();
|
||||
void update();
|
||||
void addDiffuseMap(std::string diffuseMap){diffuseMapTextures.push_back(new Texture(diffuseMap));}
|
||||
void addDiffuseMap(std::string diffuseMap[6]){diffuseMapTextures.push_back(new Texture(diffuseMap));}
|
||||
void addDiffuseMap(Texture *texture){diffuseMapTextures.push_back(texture);}
|
||||
void addNormalMap(std::string normalMap){normalMapTextures.push_back(new Texture(normalMap));}
|
||||
void addSpecularMap(std::string specularMap){specularMapTextures.push_back(new Texture(specularMap));}
|
||||
inline void setDiffuseColor(Vector4 diffuse){this->diffuseColor=diffuse;}
|
||||
inline void setSpecularColor(Vector4 specular){this->specularColor=specular;}
|
||||
inline void setLightingEnabled(bool lighting){this->lightingEnabled=lighting;}
|
||||
inline Shader* getShader(){return shader;}
|
||||
inline void setTexturingEnabled(bool texturing){this->texturingEnabled=texturing;}
|
||||
inline bool isLightingEnabled(){return lightingEnabled;}
|
||||
inline bool isTexturingEnabled(){return texturingEnabled;}
|
||||
inline Shader* getShader(){return shader;}
|
||||
inline Texture* getDiffuseMap(int i){return diffuseMapTextures[i];}
|
||||
inline Type getType(){return type;}
|
||||
private:
|
||||
Type type;
|
||||
bool lightingEnabled=false;
|
||||
bool lightingEnabled=false,texturingEnabled=true;
|
||||
std::vector<Texture*> diffuseMapTextures,normalMapTextures,specularMapTextures;
|
||||
Vector4 diffuseColor=Vector4::VEC_IJKL,specularColor=Vector4::VEC_IJKL;
|
||||
Shader *shader=nullptr;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -31,9 +31,9 @@ namespace vb01{
|
||||
|
||||
glBindVertexArray(VAO);
|
||||
glBindBuffer(GL_ARRAY_BUFFER,VBO);
|
||||
glBufferData(GL_ARRAY_BUFFER, 3*numTris*sizeof(Vertex), vertices, GL_STATIC_DRAW);
|
||||
glBufferData(GL_ARRAY_BUFFER, 3*numTris*sizeof(Vertex),staticVerts?vertices:NULL, staticVerts?GL_STATIC_DRAW:GL_DYNAMIC_DRAW);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,EBO);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER,3*numTris*sizeof(unsigned int),indices,GL_STATIC_DRAW);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER,3*numTris*sizeof(unsigned int),staticVerts?indices:NULL,staticVerts?GL_STATIC_DRAW:GL_DYNAMIC_DRAW);
|
||||
|
||||
glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,sizeof(Vertex),(void*)0);
|
||||
glEnableVertexAttribArray(0);
|
||||
@@ -41,10 +41,13 @@ namespace vb01{
|
||||
glEnableVertexAttribArray(1);
|
||||
glVertexAttribPointer(2,2,GL_FLOAT,GL_FALSE,sizeof(Vertex),(void*)(offsetof(Vertex,texCoords)));
|
||||
glEnableVertexAttribArray(2);
|
||||
|
||||
}
|
||||
|
||||
void Mesh::update(){
|
||||
mat4 model=mat4(1.f);
|
||||
mat4 view=mat4(1.f);
|
||||
mat4 proj=mat4(1.f);
|
||||
|
||||
Root *root=Root::getSingleton();
|
||||
Camera *cam=root->getCamera();
|
||||
float fov=cam->getFov(),width=root->getWidth(),height=root->getHeight();
|
||||
@@ -52,19 +55,29 @@ namespace vb01{
|
||||
Vector3 pos=(node?node->getPosition():Vector3::VEC_ZERO);
|
||||
Vector3 dir=cam->getDirection(),up=cam->getUp(),camPos=cam->getPosition();
|
||||
|
||||
mat4 model=translate(mat4(1.),vec3(pos.x,pos.y,pos.z));
|
||||
model=translate(mat4(1.),vec3(pos.x,pos.y,pos.z));
|
||||
model=rotate(model,radians(0.f),vec3(1,1,1));
|
||||
mat4 view=lookAt(vec3(camPos.x,camPos.y,camPos.z),vec3(camPos.x+dir.x,camPos.y+dir.y,camPos.z+dir.z),vec3(up.x,up.y,up.z));
|
||||
mat4 proj=perspective(radians(fov),width/height,nearPlane,farPlane);
|
||||
//proj=ortho(0.f,800.f,0.f,-600.f,nearPlane,farPlane);
|
||||
view=lookAt(vec3(camPos.x,camPos.y,camPos.z),vec3(camPos.x+dir.x,camPos.y+dir.y,camPos.z+dir.z),vec3(up.x,up.y,up.z));
|
||||
proj=perspective(radians(fov),width/height,nearPlane,farPlane);
|
||||
|
||||
material->update();
|
||||
material->getShader()->setVec3(camPos,"camPos");
|
||||
material->getShader()->setMat4(model,"model");
|
||||
material->getShader()->setMat4(view,"view");
|
||||
material->getShader()->setMat4(proj,"proj");
|
||||
Shader *shader=material->getShader();
|
||||
shader->setVec3(camPos,"camPos");
|
||||
shader->setMat4(model,"model");
|
||||
shader->setMat4(view,"view");
|
||||
shader->setMat4(proj,"proj");
|
||||
if(material->getType()==Material::MATERIAL_GUI)
|
||||
shader->setVec2(Vector2((float)width,(float)height),"screen");
|
||||
//proj=ortho(0.f,800.f,0.f,-600.f,nearPlane,farPlane);
|
||||
|
||||
glBindVertexArray(VAO);
|
||||
|
||||
if(!staticVerts){
|
||||
glBindBuffer(GL_ARRAY_BUFFER,VBO);
|
||||
glBufferSubData(GL_ARRAY_BUFFER, 0, 3*numTris*sizeof(Vertex),vertices);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,EBO);
|
||||
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER,0,3*numTris*sizeof(unsigned int),indices);
|
||||
}
|
||||
glDrawElements(GL_TRIANGLES,3*numTris,GL_UNSIGNED_INT,0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,8 @@ namespace vb01{
|
||||
protected:
|
||||
Mesh();
|
||||
void construct();
|
||||
|
||||
bool staticVerts=true;
|
||||
Vertex *vertices;
|
||||
unsigned int *indices,VAO,VBO,EBO;
|
||||
int numTris;
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include"mesh.h"
|
||||
#include"particleEmitter.h"
|
||||
#include"light.h"
|
||||
#include"text.h"
|
||||
#include"material.h"
|
||||
|
||||
using namespace std;
|
||||
@@ -21,6 +22,8 @@ namespace vb01{
|
||||
l->update();
|
||||
for(ParticleEmitter *p : emitters)
|
||||
p->update();
|
||||
for(Text *t : texts)
|
||||
t->update();
|
||||
for(Node *c : children)
|
||||
c->update();
|
||||
}
|
||||
@@ -64,4 +67,9 @@ namespace vb01{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Node::addText(Text *text){
|
||||
texts.push_back(text);
|
||||
text->setNode(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ namespace vb01{
|
||||
class Model;
|
||||
class Light;
|
||||
class ParticleEmitter;
|
||||
class Text;
|
||||
|
||||
class Node{
|
||||
public:
|
||||
@@ -20,6 +21,7 @@ namespace vb01{
|
||||
virtual void update();
|
||||
void attachChild(Node*);
|
||||
void addLight(Light*);
|
||||
void addText(Text*);
|
||||
inline std::vector<Mesh*>& getMeshes(){return meshes;}
|
||||
inline Node* getParent(){return parent;}
|
||||
inline Vector3 getPosition(){return pos;}
|
||||
@@ -34,6 +36,7 @@ namespace vb01{
|
||||
std::vector<ParticleEmitter*> emitters;
|
||||
std::vector<Node*> children,descendants;
|
||||
std::vector<Light*> lights;
|
||||
std::vector<Text*> texts;
|
||||
Node *parent=nullptr;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,35 +1,58 @@
|
||||
#include"quad.h"
|
||||
|
||||
namespace vb01{
|
||||
Quad::Quad(Vector3 size) : Mesh(){
|
||||
Vertex v1,v2,v3,v4,v5,v6;
|
||||
v1.pos=Vector3(size.x/2,size.y/2,0);
|
||||
v1.norm=Vector3(0,0,-1);
|
||||
v1.texCoords=Vector2(1,1);
|
||||
|
||||
v2.pos=Vector3(-size.x/2,size.y/2,0);
|
||||
v2.norm=Vector3(0,0,-1);
|
||||
v2.texCoords=Vector2(0,1);
|
||||
|
||||
v3.pos=Vector3(-size.x/2,-size.y/2,0);
|
||||
v3.norm=Vector3(0,0,-1);
|
||||
v3.texCoords=Vector2(0,0);
|
||||
|
||||
v4.pos=Vector3(-size.x/2,-size.y/2,0);
|
||||
v4.norm=Vector3(0,0,-1);
|
||||
v4.texCoords=Vector2(0,0);
|
||||
|
||||
v5.pos=Vector3(size.x/2,-size.y/2,0);
|
||||
v5.norm=Vector3(0,0,-1);
|
||||
v5.texCoords=Vector2(1,0);
|
||||
|
||||
v6.pos=Vector3(size.x/2,size.y/2,0);
|
||||
v6.norm=Vector3(0,0,-1);
|
||||
v6.texCoords=Vector2(1,1);
|
||||
Quad::Quad(Vector3 size,bool spatial) : Mesh(){
|
||||
this->spatial=spatial;
|
||||
this->staticVerts=false;
|
||||
|
||||
int numPolyVerts=3;
|
||||
numTris=2;
|
||||
indices=new unsigned int[numTris*numPolyVerts];
|
||||
vertices=new Vertex[numTris*numPolyVerts];
|
||||
|
||||
setSize(size);
|
||||
|
||||
Mesh::construct();
|
||||
}
|
||||
|
||||
void Quad::setSize(Vector3 size){
|
||||
this->size=size;
|
||||
|
||||
Vertex v1,v2,v3,v4,v5,v6;
|
||||
if(spatial){
|
||||
v1.pos=Vector3(size.x/2,size.y/2,0);
|
||||
v2.pos=Vector3(-size.x/2,size.y/2,0);
|
||||
v3.pos=Vector3(-size.x/2,-size.y/2,0);
|
||||
v4.pos=Vector3(-size.x/2,-size.y/2,0);
|
||||
v5.pos=Vector3(size.x/2,-size.y/2,0);
|
||||
v6.pos=Vector3(size.x/2,size.y/2,0);
|
||||
}
|
||||
else{
|
||||
v1.pos=Vector3(size.x,0,0);
|
||||
v2.pos=Vector3(0,0,0);
|
||||
v3.pos=Vector3(0,size.y,0);
|
||||
v4.pos=Vector3(0,size.y,0);
|
||||
v5.pos=Vector3(size.x,size.y,0);
|
||||
v6.pos=Vector3(size.x,0,0);
|
||||
}
|
||||
v1.norm=Vector3(0,0,-1);
|
||||
v1.texCoords=Vector2(1,1);
|
||||
|
||||
v2.norm=Vector3(0,0,-1);
|
||||
v2.texCoords=Vector2(0,1);
|
||||
|
||||
v3.norm=Vector3(0,0,-1);
|
||||
v3.texCoords=Vector2(0,0);
|
||||
|
||||
v4.norm=Vector3(0,0,-1);
|
||||
v4.texCoords=Vector2(0,0);
|
||||
|
||||
v5.norm=Vector3(0,0,-1);
|
||||
v5.texCoords=Vector2(1,0);
|
||||
|
||||
v6.norm=Vector3(0,0,-1);
|
||||
v6.texCoords=Vector2(1,1);
|
||||
|
||||
indices[0]=0;
|
||||
indices[1]=1;
|
||||
indices[2]=2;
|
||||
@@ -37,13 +60,12 @@ namespace vb01{
|
||||
indices[4]=4;
|
||||
indices[5]=5;
|
||||
|
||||
vertices=new Vertex[numTris*numPolyVerts];
|
||||
vertices[0]=v1;
|
||||
vertices[1]=v2;
|
||||
vertices[2]=v3;
|
||||
vertices[3]=v4;
|
||||
vertices[4]=v5;
|
||||
vertices[5]=v6;
|
||||
Mesh::construct();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -7,8 +7,11 @@
|
||||
namespace vb01{
|
||||
class Quad : public Mesh{
|
||||
public:
|
||||
Quad(Vector3);
|
||||
Quad(Vector3,bool=true);
|
||||
void setSize(Vector3);
|
||||
private:
|
||||
Vector3 size;
|
||||
bool spatial;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
#include"rectangle.h"
|
||||
|
||||
namespace vb01{
|
||||
Rectangle::Rectangle(Vector3 size){
|
||||
|
||||
}
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
#ifndef RECTANGLE_H
|
||||
#define RECTANGLE_H
|
||||
|
||||
#include"vector.h"
|
||||
|
||||
namespace vb01{
|
||||
class Rectangle{
|
||||
public:
|
||||
Rectangle(Vector3);
|
||||
~Rectangle();
|
||||
void update();
|
||||
private:
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -6,6 +6,7 @@
|
||||
#include<iostream>
|
||||
#include"shader.h"
|
||||
#include"box.h"
|
||||
#include"quad.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -20,6 +21,8 @@ namespace vb01{
|
||||
|
||||
Root::Root(){
|
||||
rootNode=new Node(Vector3::VEC_ZERO);
|
||||
guiNode=new Node(Vector3::VEC_ZERO);
|
||||
|
||||
camera=new Camera();
|
||||
}
|
||||
|
||||
@@ -46,14 +49,36 @@ namespace vb01{
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glEnable(GL_STENCIL_TEST);
|
||||
glEnable(GL_CULL_FACE);
|
||||
glCullFace(GL_FRONT);
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
glGenFramebuffers(1,&guiFBO);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER,guiFBO);
|
||||
Texture *texture=new Texture();
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,*(texture->getTexture()),0);
|
||||
|
||||
glGenRenderbuffers(1,&guiRBO);
|
||||
glBindRenderbuffer(GL_RENDERBUFFER,guiRBO);
|
||||
glRenderbufferStorage(GL_RENDERBUFFER,GL_DEPTH24_STENCIL8,width,height);
|
||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_DEPTH_STENCIL_ATTACHMENT,GL_RENDERBUFFER,guiRBO);
|
||||
if(glCheckFramebufferStatus(GL_FRAMEBUFFER)!=GL_FRAMEBUFFER_COMPLETE)
|
||||
cout<<"Not complete\n";
|
||||
else
|
||||
cout<<"Complete\n";
|
||||
glBindFramebuffer(GL_FRAMEBUFFER,0);
|
||||
|
||||
guiPlane=new Quad(Vector3::VEC_IJK);
|
||||
Material *mat=new Material(Material::MATERIAL_GUI);
|
||||
mat->addDiffuseMap(texture);
|
||||
guiPlane->setMaterial(mat);
|
||||
}
|
||||
|
||||
void Root::update(){
|
||||
if(running){
|
||||
glClearColor(0,0,0,1);
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glEnable(GL_CULL_FACE);
|
||||
|
||||
if(skybox){
|
||||
glDepthMask(GL_FALSE);
|
||||
@@ -62,7 +87,19 @@ namespace vb01{
|
||||
glDepthMask(GL_TRUE);
|
||||
glCullFace(GL_FRONT);
|
||||
}
|
||||
|
||||
rootNode->update();
|
||||
glDisable(GL_CULL_FACE);
|
||||
|
||||
guiNode->update();
|
||||
glBindFramebuffer(GL_FRAMEBUFFER,guiFBO);
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER,0);
|
||||
|
||||
//glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
||||
|
||||
//guiPlane->update();
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
|
||||
glfwSwapBuffers(window);
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ namespace vb01{
|
||||
|
||||
class Mesh;
|
||||
class Box;
|
||||
class Quad;
|
||||
class Shader;
|
||||
|
||||
class Root{
|
||||
@@ -21,16 +22,19 @@ namespace vb01{
|
||||
void start(int,int);
|
||||
inline Camera* getCamera(){return camera;}
|
||||
inline Node* getRootNode(){return rootNode;}
|
||||
inline Node* getGuiNode(){return guiNode;}
|
||||
inline int getWidth(){return width;}
|
||||
inline int getHeight(){return height;}
|
||||
void createSkybox(std::string[6]);
|
||||
static Root* getSingleton();
|
||||
private:
|
||||
Box *skybox=nullptr;
|
||||
Quad *guiPlane=nullptr;
|
||||
bool running=false;
|
||||
int width,height;
|
||||
unsigned int guiFBO,guiRBO;
|
||||
GLFWwindow *window;
|
||||
Node *rootNode;
|
||||
Node *rootNode,*guiNode;
|
||||
Camera *camera;
|
||||
std::vector<Mesh*> meshes;
|
||||
void framebuffer_size_callback(GLFWwindow*,int,int);
|
||||
|
||||
@@ -18,13 +18,16 @@ EBO particleEmitter.h /^ unsigned int instanceVBO,VAO,VBO,EBO;$/;" m class:vb0
|
||||
ErrorType shader.h /^ enum ErrorType{VERTEX,FRAGMENT,PROGRAM};$/;" g class:vb01::Shader
|
||||
FAST_BITS stb_image.h /^#define FAST_BITS /;" d
|
||||
FRAGMENT shader.h /^ enum ErrorType{VERTEX,FRAGMENT,PROGRAM};$/;" e enum:vb01::Shader::ErrorType
|
||||
Glyph text.h /^ struct Glyph{$/;" s class:vb01::Text
|
||||
LIGHT_H light.h /^#define LIGHT_H$/;" d
|
||||
Light light.cpp /^ Light::Light(){$/;" f class:vb01::Light
|
||||
Light light.h /^ class Light{$/;" c namespace:vb01
|
||||
MATERIAL_2D material.h /^ enum Type{MATERIAL_2D,MATERIAL_PARTICLE,MATERIAL_SKYBOX};$/;" e enum:vb01::Material::Type
|
||||
MATERIAL_2D material.h /^ enum Type{MATERIAL_2D,MATERIAL_PARTICLE,MATERIAL_SKYBOX,MATERIAL_GUI,MATERIAL_TEXT};$/;" e enum:vb01::Material::Type
|
||||
MATERIAL_GUI material.h /^ enum Type{MATERIAL_2D,MATERIAL_PARTICLE,MATERIAL_SKYBOX,MATERIAL_GUI,MATERIAL_TEXT};$/;" e enum:vb01::Material::Type
|
||||
MATERIAL_H material.h /^#define MATERIAL_H$/;" d
|
||||
MATERIAL_PARTICLE material.h /^ enum Type{MATERIAL_2D,MATERIAL_PARTICLE,MATERIAL_SKYBOX};$/;" e enum:vb01::Material::Type
|
||||
MATERIAL_SKYBOX material.h /^ enum Type{MATERIAL_2D,MATERIAL_PARTICLE,MATERIAL_SKYBOX};$/;" e enum:vb01::Material::Type
|
||||
MATERIAL_PARTICLE material.h /^ enum Type{MATERIAL_2D,MATERIAL_PARTICLE,MATERIAL_SKYBOX,MATERIAL_GUI,MATERIAL_TEXT};$/;" e enum:vb01::Material::Type
|
||||
MATERIAL_SKYBOX material.h /^ enum Type{MATERIAL_2D,MATERIAL_PARTICLE,MATERIAL_SKYBOX,MATERIAL_GUI,MATERIAL_TEXT};$/;" e enum:vb01::Material::Type
|
||||
MATERIAL_TEXT material.h /^ enum Type{MATERIAL_2D,MATERIAL_PARTICLE,MATERIAL_SKYBOX,MATERIAL_GUI,MATERIAL_TEXT};$/;" e enum:vb01::Material::Type
|
||||
MESH_H mesh.h /^#define MESH_H$/;" d
|
||||
MODEL_H model.h /^#define MODEL_H$/;" d
|
||||
Material material.cpp /^ Material::Material(Type type){$/;" f class:vb01::Material
|
||||
@@ -52,9 +55,12 @@ QUAT_J quaternion.cpp /^ const quaternion quaternion::QUAT_J(0,0,1,0);$/;" m cla
|
||||
QUAT_J quaternion.h /^ const static quaternion QUAT_I,QUAT_J,QUAT_K;$/;" m class:vb01::quaternion typeref:typename:const quaternion
|
||||
QUAT_K quaternion.cpp /^ const quaternion quaternion::QUAT_K(0,0,0,1);$/;" m class:vb01::quaternion typeref:typename:const quaternion
|
||||
QUAT_K quaternion.h /^ const static quaternion QUAT_I,QUAT_J,QUAT_K;$/;" m class:vb01::quaternion typeref:typename:const quaternion
|
||||
Quad quad.cpp /^ Quad::Quad(Vector3 size) : Mesh(){$/;" f class:vb01::Quad
|
||||
Quad quad.cpp /^ Quad::Quad(Vector3 size,bool spatial) : Mesh(){$/;" f class:vb01::Quad
|
||||
Quad quad.h /^ class Quad : public Mesh{$/;" c namespace:vb01
|
||||
RECTANGLE_H rectangle.h /^#define RECTANGLE_H$/;" d
|
||||
ROOT_H root.h /^#define ROOT_H$/;" d
|
||||
Rectangle rectangle.cpp /^ Rectangle::Rectangle(Vector3 size){$/;" f class:vb01::Rectangle
|
||||
Rectangle rectangle.h /^ class Rectangle{$/;" c namespace:vb01
|
||||
Root root.cpp /^ Root::Root(){$/;" f class:vb01::Root
|
||||
Root root.h /^ class Root{$/;" c namespace:vb01
|
||||
SHADER_H shader.h /^#define SHADER_H$/;" d
|
||||
@@ -119,17 +125,24 @@ Shader shader.h /^ class Shader{$/;" c namespace:vb01
|
||||
TEXTURE_2D texture.h /^ enum TextureType{TEXTURE_2D,TEXTURE_CUBEMAP};$/;" e enum:vb01::Texture::TextureType
|
||||
TEXTURE_CUBEMAP texture.h /^ enum TextureType{TEXTURE_2D,TEXTURE_CUBEMAP};$/;" e enum:vb01::Texture::TextureType
|
||||
TEXTURE_H texture.h /^#define TEXTURE_H$/;" d
|
||||
TEXT_H text.h /^#define TEXT_H$/;" d
|
||||
Text text.cpp /^ Text::Text(string fontPath,string entry){$/;" f class:vb01::Text
|
||||
Text text.h /^ class Text{$/;" c namespace:vb01
|
||||
Texture texture.cpp /^ Texture::Texture(){$/;" f class:vb01::Texture
|
||||
Texture texture.cpp /^ Texture::Texture(FT_Face &face, char ch){$/;" f class:vb01::Texture
|
||||
Texture texture.cpp /^ Texture::Texture(string path){$/;" f class:vb01::Texture
|
||||
Texture texture.cpp /^ Texture::Texture(string paths[6]){$/;" f class:vb01::Texture
|
||||
Texture texture.h /^ class Texture{$/;" c namespace:vb01
|
||||
TextureType texture.h /^ enum TextureType{TEXTURE_2D,TEXTURE_CUBEMAP};$/;" g class:vb01::Texture
|
||||
Type light.h /^ enum Type{POINT,DIRECTIONAL,SPOT,AMBIENT};$/;" g class:vb01::Light
|
||||
Type material.h /^ enum Type{MATERIAL_2D,MATERIAL_PARTICLE,MATERIAL_SKYBOX};$/;" g class:vb01::Material
|
||||
Type material.h /^ enum Type{MATERIAL_2D,MATERIAL_PARTICLE,MATERIAL_SKYBOX,MATERIAL_GUI,MATERIAL_TEXT};$/;" g class:vb01::Material
|
||||
UTIL_H util.h /^#define UTIL_H$/;" d
|
||||
VAO mesh.h /^ unsigned int *indices,VAO,VBO,EBO;$/;" m class:vb01::Mesh typeref:typename:unsigned int *
|
||||
VAO particleEmitter.h /^ unsigned int instanceVBO,VAO,VBO,EBO;$/;" m class:vb01::ParticleEmitter typeref:typename:unsigned int
|
||||
VAO text.h /^ unsigned int VAO, VBO;$/;" m class:vb01::Text typeref:typename:unsigned int
|
||||
VBO mesh.h /^ unsigned int *indices,VAO,VBO,EBO;$/;" m class:vb01::Mesh typeref:typename:unsigned int *
|
||||
VBO particleEmitter.h /^ unsigned int instanceVBO,VAO,VBO,EBO;$/;" m class:vb01::ParticleEmitter typeref:typename:unsigned int
|
||||
VBO text.h /^ unsigned int VAO, VBO;$/;" m class:vb01::Text typeref:typename:unsigned int
|
||||
VECTOR_H vector.h /^#define VECTOR_H$/;" d
|
||||
VEC_I vector.cpp /^ const Vector2 Vector2::VEC_I(1,0); $/;" m class:vb01::Vector2 typeref:typename:const Vector2
|
||||
VEC_I vector.cpp /^ const Vector3 Vector3::VEC_I(1,0,0); $/;" m class:vb01::Vector3 typeref:typename:const Vector3
|
||||
@@ -196,11 +209,14 @@ __anon84e4e8861008 stb_image.h /^{$/;" s
|
||||
__anon84e4e8861108 stb_image.h /^{$/;" s
|
||||
__anon84e4e8861208 stb_image.h /^{$/;" s
|
||||
__anon84e4e8861308 stb_image.h /^{$/;" s
|
||||
addDiffuseMap material.h /^ void addDiffuseMap(Texture *texture){diffuseMapTextures.push_back(texture);}$/;" f class:vb01::Material typeref:typename:void
|
||||
addDiffuseMap material.h /^ void addDiffuseMap(std::string diffuseMap){diffuseMapTextures.push_back(new Texture(diffuseMa/;" f class:vb01::Material typeref:typename:void
|
||||
addDiffuseMap material.h /^ void addDiffuseMap(std::string diffuseMap[6]){diffuseMapTextures.push_back(new Texture(diffus/;" f class:vb01::Material typeref:typename:void
|
||||
addLight node.cpp /^ void Node::addLight(Light *light){$/;" f class:vb01::Node typeref:typename:void
|
||||
addNormalMap material.h /^ void addNormalMap(std::string normalMap){normalMapTextures.push_back(new Texture(normalMap));/;" f class:vb01::Material typeref:typename:void
|
||||
addSpecularMap material.h /^ void addSpecularMap(std::string specularMap){specularMapTextures.push_back(new Texture(specul/;" f class:vb01::Material typeref:typename:void
|
||||
addText node.cpp /^ void Node::addText(Text *text){$/;" f class:vb01::Node typeref:typename:void
|
||||
advance text.h /^ unsigned int advance;$/;" m struct:vb01::Text::Glyph typeref:typename:unsigned int
|
||||
all_a stb_image.h /^ unsigned int mr,mg,mb,ma, all_a;$/;" m struct:__anon84e4e8861008 typeref:typename:unsigned int
|
||||
app14_color_transform stb_image.h /^ int app14_color_transform; \/\/ Adobe APP14 tag$/;" m struct:__anon84e4e8860808 typeref:typename:int
|
||||
attachChild node.cpp /^ void Node::attachChild(Node *child){$/;" f class:vb01::Node typeref:typename:void
|
||||
@@ -208,14 +224,17 @@ attachMesh node.cpp /^ void Node::attachMesh(Mesh *mesh){$/;" f class:vb01::Node
|
||||
attachParticleEmitter node.cpp /^ void Node::attachParticleEmitter(ParticleEmitter *emitter){$/;" f class:vb01::Node typeref:typename:void
|
||||
attenuationValues light.h /^ Vector3 pos,color,attenuationValues=Vector3(1.8,.7,1),direction;$/;" m class:vb01::Light typeref:typename:Vector3
|
||||
background stb_image.h /^ stbi_uc *background; \/\/ The current "background" as far as a gif is concerned$/;" m struct:__anon84e4e8861308 typeref:typename:stbi_uc *
|
||||
bearing text.h /^ Vector2 size,bearing;$/;" m struct:vb01::Text::Glyph typeref:typename:Vector2
|
||||
bgindex stb_image.h /^ int flags, bgindex, ratio, transparent, eflags;$/;" m struct:__anon84e4e8861308 typeref:typename:int
|
||||
bits_per_channel stb_image.h /^ int bits_per_channel;$/;" m struct:__anon84e4e8860508 typeref:typename:int
|
||||
bpp stb_image.h /^ int bpp, offset, hsz;$/;" m struct:__anon84e4e8861008 typeref:typename:int
|
||||
buffer_start stb_image.h /^ stbi_uc buffer_start[128];$/;" m struct:__anon84e4e8860308 typeref:typename:stbi_uc[128]
|
||||
buflen stb_image.h /^ int buflen;$/;" m struct:__anon84e4e8860308 typeref:typename:int
|
||||
camera root.h /^ Camera *camera;$/;" m class:vb01::Root typeref:typename:Camera *
|
||||
ch text.h /^ u32 ch;$/;" m struct:vb01::Text::Glyph typeref:typename:u32
|
||||
channel stb_image.h /^ stbi_uc size,type,channel;$/;" m struct:__anon84e4e8861108 typeref:typename:stbi_uc
|
||||
channel_order stb_image.h /^ int channel_order;$/;" m struct:__anon84e4e8860508 typeref:typename:int
|
||||
characters text.h /^ std::vector<Glyph> characters;$/;" m class:vb01::Text typeref:typename:std::vector<Glyph>
|
||||
checkCompileErrors shader.cpp /^ void Shader::checkCompileErrors(unsigned int shader, ErrorType type){$/;" f class:vb01::Shader typeref:typename:void
|
||||
children node.h /^ std::vector<Node*> children,descendants;$/;" m class:vb01::Node typeref:typename:std::vector<Node * >
|
||||
code stb_image.h /^ stbi__uint16 code[256];$/;" m struct:__anon84e4e8860708 typeref:typename:stbi__uint16[256]
|
||||
@@ -228,6 +247,7 @@ coeff_h stb_image.h /^ int coeff_w, coeff_h; \/\/ number of 8x8 coeffi
|
||||
coeff_w stb_image.h /^ int coeff_w, coeff_h; \/\/ number of 8x8 coefficient blocks$/;" m struct:__anon84e4e8860808::__anon84e4e8860908 typeref:typename:int
|
||||
color light.h /^ Vector3 pos,color,attenuationValues=Vector3(1.8,.7,1),direction;$/;" m class:vb01::Light typeref:typename:Vector3
|
||||
color particleEmitter.h /^ Vector4 color;$/;" m struct:vb01::ParticleEmitter::Particle typeref:typename:Vector4
|
||||
color text.h /^ Vector4 color=Vector4::VEC_IJKL;$/;" m class:vb01::Text typeref:typename:Vector4
|
||||
color_table stb_image.h /^ stbi_uc *color_table;$/;" m struct:__anon84e4e8861308 typeref:typename:stbi_uc *
|
||||
conj quaternion.h /^ inline vb01::quaternion conj(){return (*this+vb01::quaternion(0,1,0,0)*(*this)*vb01::quaterni/;" f class:vb01::quaternion typeref:typename:vb01::quaternion
|
||||
construct mesh.cpp /^ void Mesh::construct(){$/;" f class:vb01::Mesh typeref:typename:void
|
||||
@@ -265,6 +285,7 @@ delta stb_image.h /^ int delta[17]; \/\/ old 'firstsymbol' - old 'firstco
|
||||
depth stb_image.h /^ int depth;$/;" m struct:__anon84e4e8860e08 typeref:typename:int
|
||||
dequant stb_image.h /^ stbi__uint16 dequant[4][64];$/;" m struct:__anon84e4e8860808 typeref:typename:stbi__uint16[4][64]
|
||||
descendants node.h /^ std::vector<Node*> children,descendants;$/;" m class:vb01::Node typeref:typename:std::vector<Node * >
|
||||
diffuseColor material.h /^ Vector4 diffuseColor=Vector4::VEC_IJKL,specularColor=Vector4::VEC_IJKL;$/;" m class:vb01::Material typeref:typename:Vector4
|
||||
diffuseMapTextures material.h /^ std::vector<Texture*> diffuseMapTextures,normalMapTextures,specularMapTextures;$/;" m class:vb01::Material typeref:typename:std::vector<Texture * >
|
||||
dir particleEmitter.h /^ Vector3 dir;$/;" m struct:vb01::ParticleEmitter::Particle typeref:typename:Vector3
|
||||
direction camera.h /^ Vector3 position=Vector3(0,0,0),direction=Vector3(0,0,1),left=Vector3(1,0,0),up=Vector3(0,1,0/;" m class:vb01::Camera typeref:typename:Vector3
|
||||
@@ -277,6 +298,7 @@ eflags stb_image.h /^ int flags, bgindex, ratio, transparent, eflags;$/;" m st
|
||||
emitters node.h /^ std::vector<ParticleEmitter*> emitters;$/;" m class:vb01::Node typeref:typename:std::vector<ParticleEmitter * >
|
||||
endColor particleEmitter.h /^ Vector4 startColor,endColor;$/;" m class:vb01::ParticleEmitter typeref:typename:Vector4
|
||||
endSize particleEmitter.h /^ Vector2 startSize=Vector2::VEC_IJ,endSize=Vector2::VEC_IJ;$/;" m class:vb01::ParticleEmitter typeref:typename:Vector2
|
||||
entry text.h /^ std::string entry;$/;" m class:vb01::Text typeref:typename:std::string
|
||||
eob_run stb_image.h /^ int eob_run;$/;" m struct:__anon84e4e8860808 typeref:typename:int
|
||||
eof stb_image.h /^ int (*eof) (void *user); \/\/ returns nonzero if we are at end o/;" m struct:__anon84e4e8860208 typeref:typename:int (*)(void * user)
|
||||
expanded stb_image.h /^ stbi_uc *idata, *expanded, *out;$/;" m struct:__anon84e4e8860e08 typeref:typename:stbi_uc **
|
||||
@@ -298,11 +320,13 @@ getAttenuationValues light.h /^ inline Vector3 getAttenuationValues(){return a
|
||||
getCamera root.h /^ inline Camera* getCamera(){return camera;}$/;" f class:vb01::Root typeref:typename:Camera *
|
||||
getChildren node.h /^ inline std::vector<Node*>& getChildren(){return children;}$/;" f class:vb01::Node typeref:typename:std::vector<Node * > &
|
||||
getDescendants node.h /^ inline std::vector<Node*>& getDescendants(){return descendants;}$/;" f class:vb01::Node typeref:typename:std::vector<Node * > &
|
||||
getDiffuseMap material.h /^ inline Texture* getDiffuseMap(int i){return diffuseMapTextures[i];}$/;" f class:vb01::Material typeref:typename:Texture *
|
||||
getDirection camera.h /^ inline Vector3 getDirection(){return direction;}$/;" f class:vb01::Camera typeref:typename:Vector3
|
||||
getDirection light.h /^ inline Vector3 getDirection(){return direction;}$/;" f class:vb01::Light typeref:typename:Vector3
|
||||
getDistanceFrom vector.h /^ float getDistanceFrom(Vector3 v){return (v-*this).getLengthSq();}$/;" f struct:vb01::Vector3 typeref:typename:float
|
||||
getFarPlane camera.h /^ inline float getFarPlane(){return farPlane;}$/;" f class:vb01::Camera typeref:typename:float
|
||||
getFov camera.h /^ inline float getFov(){return fov;}$/;" f class:vb01::Camera typeref:typename:float
|
||||
getGuiNode root.h /^ inline Node* getGuiNode(){return guiNode;}$/;" f class:vb01::Root typeref:typename:Node *
|
||||
getHeight root.h /^ inline int getHeight(){return height;}$/;" f class:vb01::Root typeref:typename:int
|
||||
getInnerAngle light.h /^ inline float getInnerAngle(){return innerAngle;}$/;" f class:vb01::Light typeref:typename:float
|
||||
getLeft camera.h /^ inline Vector3 getLeft(){return left;}$/;" f class:vb01::Camera typeref:typename:Vector3
|
||||
@@ -327,9 +351,15 @@ getPosition node.h /^ inline Vector3 getPosition(){return pos;}$/;" f class:vb
|
||||
getRootNode root.h /^ inline Node* getRootNode(){return rootNode;}$/;" f class:vb01::Root typeref:typename:Node *
|
||||
getShader material.h /^ inline Shader* getShader(){return shader;}$/;" f class:vb01::Material typeref:typename:Shader *
|
||||
getSingleton root.cpp /^ Root* Root::getSingleton(){return root;}$/;" f class:vb01::Root typeref:typename:Root *
|
||||
getTexture texture.h /^ inline unsigned int* getTexture(){return &texture;}$/;" f class:vb01::Texture typeref:typename:unsigned int *
|
||||
getTime util.h /^ inline s64 getTime(){return s64(std::chrono::system_clock::now().time_since_epoch()\/std::chron/;" f namespace:vb01 typeref:typename:s64
|
||||
getType material.h /^ inline Type getType(){return type;}$/;" f class:vb01::Material typeref:typename:Type
|
||||
getUp camera.h /^ inline Vector3 getUp(){return up;}$/;" f class:vb01::Camera typeref:typename:Vector3
|
||||
getWidth root.h /^ inline int getWidth(){return width;}$/;" f class:vb01::Root typeref:typename:int
|
||||
guiFBO root.h /^ unsigned int guiFBO,guiRBO;$/;" m class:vb01::Root typeref:typename:unsigned int
|
||||
guiNode root.h /^ Node *rootNode,*guiNode;$/;" m class:vb01::Root typeref:typename:Node **
|
||||
guiPlane root.h /^ Quad *guiPlane=nullptr;$/;" m class:vb01::Root typeref:typename:Quad *
|
||||
guiRBO root.h /^ unsigned int guiFBO,guiRBO;$/;" m class:vb01::Root typeref:typename:unsigned int
|
||||
h stb_image.h /^ int h,v;$/;" m struct:__anon84e4e8860808::__anon84e4e8860908 typeref:typename:int
|
||||
h stb_image.h /^ int w,h;$/;" m struct:__anon84e4e8861308 typeref:typename:int
|
||||
h2 stb_image.h /^ int x,y,w2,h2;$/;" m struct:__anon84e4e8860808::__anon84e4e8860908 typeref:typename:int
|
||||
@@ -368,11 +398,12 @@ instanceVBO particleEmitter.h /^ unsigned int instanceVBO,VAO,VBO,EBO;$/;" m c
|
||||
io stb_image.h /^ stbi_io_callbacks io;$/;" m struct:__anon84e4e8860308 typeref:typename:stbi_io_callbacks
|
||||
io_user_data stb_image.h /^ void *io_user_data;$/;" m struct:__anon84e4e8860308 typeref:typename:void *
|
||||
isLightingEnabled material.h /^ inline bool isLightingEnabled(){return lightingEnabled;}$/;" f class:vb01::Material typeref:typename:bool
|
||||
isTexturingEnabled material.h /^ inline bool isTexturingEnabled(){return texturingEnabled;}$/;" f class:vb01::Material typeref:typename:bool
|
||||
jfif stb_image.h /^ int jfif;$/;" m struct:__anon84e4e8860808 typeref:typename:int
|
||||
left camera.h /^ Vector3 position=Vector3(0,0,0),direction=Vector3(0,0,1),left=Vector3(1,0,0),up=Vector3(0,1,0/;" m class:vb01::Camera typeref:typename:Vector3
|
||||
length stb_image.h /^ stbi__uint32 length;$/;" m struct:__anon84e4e8860d08 typeref:typename:stbi__uint32
|
||||
lflags stb_image.h /^ int lflags;$/;" m struct:__anon84e4e8861308 typeref:typename:int
|
||||
lightingEnabled material.h /^ bool lightingEnabled=false;$/;" m class:vb01::Material typeref:typename:bool
|
||||
lightingEnabled material.h /^ bool lightingEnabled=false,texturingEnabled=true;$/;" m class:vb01::Material typeref:typename:bool
|
||||
lights node.h /^ std::vector<Light*> lights;$/;" m class:vb01::Node typeref:typename:std::vector<Light * >
|
||||
line0 stb_image.h /^ stbi_uc *line0,*line1;$/;" m struct:__anon84e4e8860a08 typeref:typename:stbi_uc *
|
||||
line1 stb_image.h /^ stbi_uc *line0,*line1;$/;" m struct:__anon84e4e8860a08 typeref:typename:stbi_uc **
|
||||
@@ -405,6 +436,7 @@ nearPlane camera.h /^ float fov=45,nearPlane=.1,farPlane=100;$/;" m class:vb01
|
||||
node light.h /^ Node *node=nullptr;$/;" m class:vb01::Light typeref:typename:Node *
|
||||
node mesh.h /^ Node *node=nullptr;$/;" m class:vb01::Mesh typeref:typename:Node *
|
||||
node particleEmitter.h /^ Node *node=nullptr;$/;" m class:vb01::ParticleEmitter typeref:typename:Node *
|
||||
node text.h /^ Node *node=nullptr;$/;" m class:vb01::Text typeref:typename:Node *
|
||||
nomore stb_image.h /^ int nomore; \/\/ flag if we saw a marker so must stop$/;" m struct:__anon84e4e8860808 typeref:typename:int
|
||||
norm mesh.h /^ Vector3 pos,norm;$/;" m struct:vb01::Mesh::Vertex typeref:typename:Vector3
|
||||
norm quaternion.h /^ inline vb01::quaternion norm(){return *this\/getLength();}$/;" f class:vb01::quaternion typeref:typename:vb01::quaternion
|
||||
@@ -472,7 +504,7 @@ resample_row_hv_2_kernel stb_image.h /^ stbi_uc *(*resample_row_hv_2_kernel)(s
|
||||
restart_interval stb_image.h /^ int restart_interval, todo;$/;" m struct:__anon84e4e8860808 typeref:typename:int
|
||||
rgb stb_image.h /^ int rgb;$/;" m struct:__anon84e4e8860808 typeref:typename:int
|
||||
root root.cpp /^ static Root *root=new Root();$/;" v namespace:vb01 typeref:typename:Root * file:
|
||||
rootNode root.h /^ Node *rootNode;$/;" m class:vb01::Root typeref:typename:Node *
|
||||
rootNode root.h /^ Node *rootNode,*guiNode;$/;" m class:vb01::Root typeref:typename:Node *
|
||||
running root.h /^ bool running=false;$/;" m class:vb01::Root typeref:typename:bool
|
||||
s stb_image.h /^ stbi__context *s;$/;" m struct:__anon84e4e8860808 typeref:typename:stbi__context *
|
||||
s stb_image.h /^ stbi__context *s;$/;" m struct:__anon84e4e8860e08 typeref:typename:stbi__context *
|
||||
@@ -480,11 +512,13 @@ s16 util.h /^ typedef short s16;$/;" t namespace:vb01 typeref:typename:short
|
||||
s32 util.h /^ typedef int s32;$/;" t namespace:vb01 typeref:typename:int
|
||||
s64 util.h /^ typedef long long s64;$/;" t namespace:vb01 typeref:typename:long long
|
||||
s8 util.h /^ typedef char s8;$/;" t namespace:vb01 typeref:typename:char
|
||||
scale text.h /^ float scale=1;$/;" m class:vb01::Text typeref:typename:float
|
||||
scan_n stb_image.h /^ int scan_n, order[4];$/;" m struct:__anon84e4e8860808 typeref:typename:int
|
||||
select texture.cpp /^ void Texture::select(){$/;" f class:vb01::Texture typeref:typename:void
|
||||
setAttenuationValues light.h /^ inline void setAttenuationValues(float a, float b, float c){$/;" f class:vb01::Light typeref:typename:void
|
||||
setBool shader.cpp /^ void Shader::setBool(bool b, string var){$/;" f class:vb01::Shader typeref:typename:void
|
||||
setColor light.h /^ inline void setColor(Vector3 color){this->color=color;}$/;" f class:vb01::Light typeref:typename:void
|
||||
setDiffuseColor material.h /^ inline void setDiffuseColor(Vector4 diffuse){this->diffuseColor=diffuse;}$/;" f class:vb01::Material typeref:typename:void
|
||||
setDirection light.h /^ inline void setDirection(Vector3 dir){this->direction=dir;}$/;" f class:vb01::Light typeref:typename:void
|
||||
setFloat shader.cpp /^ void Shader::setFloat(float fl, string var){$/;" f class:vb01::Shader typeref:typename:void
|
||||
setInnerAngle light.h /^ inline void setInnerAngle(float innerAngle){this->innerAngle=innerAngle;}$/;" f class:vb01::Light typeref:typename:void
|
||||
@@ -497,22 +531,34 @@ setMaterial particleEmitter.h /^ inline void setMaterial(Material *mat){this->
|
||||
setNode light.h /^ inline void setNode(Node *node){this->node=node;}$/;" f class:vb01::Light typeref:typename:void
|
||||
setNode mesh.h /^ inline void setNode(Node *node){this->node=node;}$/;" f class:vb01::Mesh typeref:typename:void
|
||||
setNode particleEmitter.h /^ inline void setNode(Node *node){this->node=node;}$/;" f class:vb01::ParticleEmitter typeref:typename:void
|
||||
setNode text.h /^ inline void setNode(Node *node){this->node=node;}$/;" f class:vb01::Text typeref:typename:void
|
||||
setOuterAngle light.h /^ inline void setOuterAngle(float outerAngle){this->outerAngle=outerAngle;}$/;" f class:vb01::Light typeref:typename:void
|
||||
setPosition camera.h /^ void setPosition(Vector3 position){this->position=position;}$/;" f class:vb01::Camera typeref:typename:void
|
||||
setPosition light.h /^ inline void setPosition(Vector3 pos){this->pos=pos;}$/;" f class:vb01::Light typeref:typename:void
|
||||
setSize box.cpp /^ void Box::setSize(Vector3 size){$/;" f class:vb01::Box typeref:typename:void
|
||||
setSize quad.cpp /^ void Quad::setSize(Vector3 size){$/;" f class:vb01::Quad typeref:typename:void
|
||||
setSpecularColor material.h /^ inline void setSpecularColor(Vector4 specular){this->specularColor=specular;}$/;" f class:vb01::Material typeref:typename:void
|
||||
setText text.cpp /^ void Text::setText(string text){$/;" f class:vb01::Text typeref:typename:void
|
||||
setTexturingEnabled material.h /^ inline void setTexturingEnabled(bool texturing){this->texturingEnabled=texturing;}$/;" f class:vb01::Material typeref:typename:void
|
||||
setType light.h /^ inline void setType(Type t){this->type=t;}$/;" f class:vb01::Light typeref:typename:void
|
||||
setVec2 shader.cpp /^ void Shader::setVec2(Vector2 vec, string var){$/;" f class:vb01::Shader typeref:typename:void
|
||||
setVec3 shader.cpp /^ void Shader::setVec3(Vector3 vec, string var){$/;" f class:vb01::Shader typeref:typename:void
|
||||
setVec4 shader.cpp /^ void Shader::setVec4(Vector4 vec, string var){$/;" f class:vb01::Shader typeref:typename:void
|
||||
shader material.h /^ Shader *shader=nullptr;$/;" m class:vb01::Material typeref:typename:Shader *
|
||||
shader text.h /^ Shader *shader=nullptr;$/;" m class:vb01::Text typeref:typename:Shader *
|
||||
size box.h /^ Vector3 size;$/;" m class:vb01::Box typeref:typename:Vector3
|
||||
size particleEmitter.h /^ Vector2 size;$/;" m struct:vb01::ParticleEmitter::Particle typeref:typename:Vector2
|
||||
size quad.h /^ Vector3 size;$/;" m class:vb01::Quad typeref:typename:Vector3
|
||||
size stb_image.h /^ stbi_uc size[257];$/;" m struct:__anon84e4e8860708 typeref:typename:stbi_uc[257]
|
||||
size stb_image.h /^ stbi_uc size[288];$/;" m struct:__anon84e4e8860b08 typeref:typename:stbi_uc[288]
|
||||
size stb_image.h /^ stbi_uc size,type,channel;$/;" m struct:__anon84e4e8861108 typeref:typename:stbi_uc
|
||||
size text.h /^ Vector2 size,bearing;$/;" m struct:vb01::Text::Glyph typeref:typename:Vector2
|
||||
skip stb_image.h /^ void (*skip) (void *user,int n); \/\/ skip the next 'n' bytes, or 'unget/;" m struct:__anon84e4e8860208 typeref:typename:void (*)(void * user,int n)
|
||||
skybox root.h /^ Box *skybox=nullptr;$/;" m class:vb01::Root typeref:typename:Box *
|
||||
spatial quad.h /^ bool spatial;$/;" m class:vb01::Quad typeref:typename:bool
|
||||
spec_end stb_image.h /^ int spec_end;$/;" m struct:__anon84e4e8860808 typeref:typename:int
|
||||
spec_start stb_image.h /^ int spec_start;$/;" m struct:__anon84e4e8860808 typeref:typename:int
|
||||
specularColor material.h /^ Vector4 diffuseColor=Vector4::VEC_IJKL,specularColor=Vector4::VEC_IJKL;$/;" m class:vb01::Material typeref:typename:Vector4
|
||||
specularMapTextures material.h /^ std::vector<Texture*> diffuseMapTextures,normalMapTextures,specularMapTextures;$/;" m class:vb01::Material typeref:typename:std::vector<Texture * >
|
||||
spread particleEmitter.h /^ float spread=0,lowLife=1,highLife=2;$/;" m class:vb01::ParticleEmitter typeref:typename:float
|
||||
start root.cpp /^ void Root::start(int width,int height){$/;" f class:vb01::Root typeref:typename:void
|
||||
@@ -520,6 +566,7 @@ startColor particleEmitter.h /^ Vector4 startColor,endColor;$/;" m class:vb01:
|
||||
startSize particleEmitter.h /^ Vector2 startSize=Vector2::VEC_IJ,endSize=Vector2::VEC_IJ;$/;" m class:vb01::ParticleEmitter typeref:typename:Vector2
|
||||
start_x stb_image.h /^ int start_x, start_y;$/;" m struct:__anon84e4e8861308 typeref:typename:int
|
||||
start_y stb_image.h /^ int start_x, start_y;$/;" m struct:__anon84e4e8861308 typeref:typename:int
|
||||
staticVerts mesh.h /^ bool staticVerts=true;$/;" m class:vb01::Mesh typeref:typename:bool
|
||||
stbi__DNL stb_image.h /^#define stbi__DNL(/;" d
|
||||
stbi__EOI stb_image.h /^#define stbi__EOI(/;" d
|
||||
stbi__SOF stb_image.h /^#define stbi__SOF(/;" d
|
||||
@@ -793,7 +840,10 @@ succ_low stb_image.h /^ int succ_low;$/;" m struct:__anon84e4e88608
|
||||
suffix stb_image.h /^ stbi_uc suffix;$/;" m struct:__anon84e4e8861208 typeref:typename:stbi_uc
|
||||
texCoords mesh.h /^ Vector2 texCoords; $/;" m struct:vb01::Mesh::Vertex typeref:typename:Vector2
|
||||
texCoords particleEmitter.h /^ Vector2 texCoords;$/;" m struct:vb01::ParticleEmitter::Vertex typeref:typename:Vector2
|
||||
texts node.h /^ std::vector<Text*> texts;$/;" m class:vb01::Node typeref:typename:std::vector<Text * >
|
||||
texture text.h /^ Texture *texture=nullptr;$/;" m struct:vb01::Text::Glyph typeref:typename:Texture *
|
||||
texture texture.h /^ unsigned int texture;$/;" m class:vb01::Texture typeref:typename:unsigned int
|
||||
texturingEnabled material.h /^ bool lightingEnabled=false,texturingEnabled=true;$/;" m class:vb01::Material typeref:typename:bool
|
||||
time particleEmitter.h /^ s64 time=0,timeToLive=0;$/;" m struct:vb01::ParticleEmitter::Particle typeref:typename:s64
|
||||
timeToLive particleEmitter.h /^ s64 time=0,timeToLive=0;$/;" m struct:vb01::ParticleEmitter::Particle typeref:typename:s64
|
||||
todo stb_image.h /^ int restart_interval, todo;$/;" m struct:__anon84e4e8860808 typeref:typename:int
|
||||
@@ -817,6 +867,7 @@ update model.cpp /^ void Model::update(){$/;" f class:vb01::Model typeref:typena
|
||||
update node.cpp /^ void Node::update(){$/;" f class:vb01::Node typeref:typename:void
|
||||
update particleEmitter.cpp /^ void ParticleEmitter::update(){$/;" f class:vb01::ParticleEmitter typeref:typename:void
|
||||
update root.cpp /^ void Root::update(){$/;" f class:vb01::Root typeref:typename:void
|
||||
update text.cpp /^ void Text::update(){$/;" f class:vb01::Text typeref:typename:void
|
||||
use shader.cpp /^ void Shader::use(){glUseProgram(id);}$/;" f class:vb01::Shader typeref:typename:void
|
||||
v stb_image.h /^ int h,v;$/;" m struct:__anon84e4e8860808::__anon84e4e8860908 typeref:typename:int
|
||||
vString shader.h /^ std::string vString,fString;$/;" m class:vb01::Shader typeref:typename:std::string
|
||||
@@ -843,10 +894,14 @@ vb01 quad.cpp /^namespace vb01{$/;" n file:
|
||||
vb01 quad.h /^namespace vb01{$/;" n
|
||||
vb01 quaternion.cpp /^namespace vb01{$/;" n file:
|
||||
vb01 quaternion.h /^namespace vb01{$/;" n
|
||||
vb01 rectangle.cpp /^namespace vb01{$/;" n file:
|
||||
vb01 rectangle.h /^namespace vb01{$/;" n
|
||||
vb01 root.cpp /^namespace vb01{$/;" n file:
|
||||
vb01 root.h /^namespace vb01{$/;" n
|
||||
vb01 shader.cpp /^namespace vb01{$/;" n file:
|
||||
vb01 shader.h /^namespace vb01{$/;" n
|
||||
vb01 text.cpp /^namespace vb01{$/;" n file:
|
||||
vb01 text.h /^namespace vb01{$/;" n
|
||||
vb01 texture.cpp /^namespace vb01{$/;" n file:
|
||||
vb01 texture.h /^namespace vb01{$/;" n
|
||||
vb01 util.cpp /^namespace vb01{$/;" n file:
|
||||
@@ -896,3 +951,4 @@ zout_start stb_image.h /^ char *zout_start;$/;" m struct:__anon84e4e8860c08 ty
|
||||
~Model model.cpp /^ Model::~Model(){}$/;" f class:vb01::Model
|
||||
~Node node.cpp /^ Node::~Node(){}$/;" f class:vb01::Node
|
||||
~ParticleEmitter particleEmitter.cpp /^ ParticleEmitter::~ParticleEmitter(){}$/;" f class:vb01::ParticleEmitter
|
||||
~Text text.cpp /^ Text::~Text(){}$/;" f class:vb01::Text
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
#include"root.h"
|
||||
#include"text.h"
|
||||
#include"shader.h"
|
||||
#include"texture.h"
|
||||
#include"node.h"
|
||||
#include<glad.h>
|
||||
#include<glfw3.h>
|
||||
#include<iostream>
|
||||
#include<ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace vb01{
|
||||
Text::Text(string fontPath,string entry){
|
||||
string basePath="/home/dominykas/c++/FSim/text.";
|
||||
shader=new Shader(basePath+"vert",basePath+"frag");
|
||||
|
||||
FT_Library ft;
|
||||
FT_Face face;
|
||||
if(FT_Init_FreeType(&ft))
|
||||
cout<<"Couldn't init Freetype\n";
|
||||
if(FT_New_Face(ft,fontPath.c_str(),0,&face))
|
||||
cout<<"Could not load font\n";
|
||||
|
||||
FT_Set_Pixel_Sizes(face,0,96);
|
||||
|
||||
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
|
||||
|
||||
for(u32 i=0;i<128;i++){
|
||||
if(FT_Load_Char(face,i,FT_LOAD_RENDER)){
|
||||
cout<<"Could not load glyph\n";
|
||||
continue;
|
||||
}
|
||||
Glyph c;
|
||||
c.ch=i;
|
||||
c.texture=new Texture(face,i);
|
||||
c.size=Vector2(face->glyph->bitmap.width,face->glyph->bitmap.rows);
|
||||
c.bearing=Vector2(face->glyph->bitmap_left,face->glyph->bitmap_top);
|
||||
c.advance=face->glyph->advance.x;
|
||||
characters.push_back(c);
|
||||
}
|
||||
|
||||
FT_Done_Face(face);
|
||||
FT_Done_FreeType(ft);
|
||||
|
||||
setText(entry);
|
||||
}
|
||||
|
||||
Text::~Text(){}
|
||||
|
||||
void Text::update(){
|
||||
Root *root=Root::getSingleton();
|
||||
int width=root->getWidth(),height=root->getHeight();
|
||||
|
||||
shader->use();
|
||||
shader->setVec4(color,"color");
|
||||
shader->setVec2(Vector2(width,height),"screen");
|
||||
|
||||
Vector3 origin=node->getPosition();
|
||||
for(int i=0;i<entry.length();i++){
|
||||
Glyph ch;
|
||||
bool foundChar=false;
|
||||
for(Glyph c : characters)
|
||||
if(entry.c_str()[i]==c.ch){
|
||||
ch=c;
|
||||
foundChar=true;
|
||||
}
|
||||
if(!foundChar)continue;
|
||||
Vector2 size=ch.size*scale,bearing=ch.bearing;
|
||||
float data[]={
|
||||
origin.x+bearing.x,origin.y-bearing.y,0,1,
|
||||
origin.x+bearing.x+size.x,origin.y-bearing.y,1,1,
|
||||
origin.x+bearing.x+size.x,origin.y-bearing.y+size.y,1,0,
|
||||
|
||||
origin.x+bearing.x+size.x,origin.y-bearing.y+size.y,1,0,
|
||||
origin.x+bearing.x,origin.y-bearing.y+size.y,0,0,
|
||||
origin.x+bearing.x,origin.y-bearing.y,0,1
|
||||
};
|
||||
origin.x+=(ch.advance>>6)*scale;
|
||||
glBindVertexArray(VAO);
|
||||
glBindBuffer(GL_ARRAY_BUFFER,VBO);
|
||||
glBufferSubData(GL_ARRAY_BUFFER,0,sizeof(data),data);
|
||||
ch.texture->select();
|
||||
glDrawArrays(GL_TRIANGLES,0,6);
|
||||
}
|
||||
}
|
||||
|
||||
void Text::setText(string text){
|
||||
this->entry=text;
|
||||
|
||||
glGenVertexArrays(1,&VAO);
|
||||
glGenBuffers(1,&VBO);
|
||||
glBindVertexArray(VAO);
|
||||
glBindBuffer(GL_ARRAY_BUFFER,VBO);
|
||||
glBufferData(GL_ARRAY_BUFFER,sizeof(float)*6*4,NULL,GL_DYNAMIC_DRAW);
|
||||
glEnableVertexAttribArray(0);
|
||||
glVertexAttribPointer(0,4,GL_FLOAT,GL_FALSE,4*sizeof(float),(void*)0);
|
||||
glBindBuffer(GL_ARRAY_BUFFER,0);
|
||||
glBindVertexArray(0);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
#version 330 core
|
||||
|
||||
in vec2 texCoords;
|
||||
|
||||
out vec4 FragColor;
|
||||
|
||||
uniform sampler2D tex;
|
||||
uniform vec4 color;
|
||||
|
||||
void main(){
|
||||
//FragColor=vec4(1,0,1,1);
|
||||
FragColor=vec4(color.xyz,texture(tex,texCoords).r);
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
#ifndef TEXT_H
|
||||
#define TEXT_H
|
||||
|
||||
#include<string>
|
||||
#include<vector>
|
||||
#include"vector.h"
|
||||
#include"util.h"
|
||||
|
||||
namespace vb01{
|
||||
class Node;
|
||||
class Texture;
|
||||
class Shader;
|
||||
|
||||
class Text{
|
||||
public:
|
||||
struct Glyph{
|
||||
u32 ch;
|
||||
Texture *texture=nullptr;
|
||||
unsigned int advance;
|
||||
Vector2 size,bearing;
|
||||
};
|
||||
|
||||
Text(std::string,std::string);
|
||||
~Text();
|
||||
void update();
|
||||
void setText(std::string);
|
||||
inline void setNode(Node *node){this->node=node;}
|
||||
private:
|
||||
Node *node=nullptr;
|
||||
std::string entry;
|
||||
std::vector<Glyph> characters;
|
||||
Shader *shader=nullptr;
|
||||
unsigned int VAO, VBO;
|
||||
float scale=1;
|
||||
Vector4 color=Vector4::VEC_IJKL;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,15 @@
|
||||
#version 330 core
|
||||
|
||||
layout (location=0) in vec4 aVert;
|
||||
|
||||
out vec2 texCoords;
|
||||
|
||||
uniform vec2 screen;
|
||||
|
||||
void main(){
|
||||
float x,y;
|
||||
x=(aVert.x-screen.x*.5)/(screen.x*.5);
|
||||
y=(screen.y*.5-aVert.y)/(screen.y*.5);
|
||||
gl_Position=vec4(x,y,0,1);
|
||||
texCoords=aVert.zw;
|
||||
}
|
||||
+37
@@ -8,6 +8,41 @@
|
||||
using namespace std;
|
||||
|
||||
namespace vb01{
|
||||
Texture::Texture(){
|
||||
width=800,height=600;
|
||||
|
||||
glGenTextures(1,&texture);
|
||||
glBindTexture(GL_TEXTURE_2D,texture);
|
||||
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,width,height,1,GL_RGB,GL_UNSIGNED_BYTE,NULL);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
|
||||
}
|
||||
|
||||
Texture::Texture(FT_Face &face, char ch){
|
||||
this->type=TextureType::TEXTURE_2D;
|
||||
|
||||
glGenTextures(1,&texture);
|
||||
glBindTexture(GL_TEXTURE_2D,texture);
|
||||
glTexImage2D(
|
||||
GL_TEXTURE_2D,
|
||||
0,
|
||||
GL_RED,
|
||||
face->glyph->bitmap.width,
|
||||
face->glyph->bitmap.rows,
|
||||
0,
|
||||
GL_RED,
|
||||
GL_UNSIGNED_BYTE,
|
||||
face->glyph->bitmap.buffer
|
||||
);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
|
||||
glBindTexture(GL_TEXTURE_2D,0);
|
||||
}
|
||||
|
||||
Texture::Texture(string path){
|
||||
this->type=TextureType::TEXTURE_2D;
|
||||
|
||||
@@ -15,6 +50,8 @@ namespace vb01{
|
||||
glBindTexture(GL_TEXTURE_2D,texture);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
|
||||
|
||||
|
||||
+3
-1
@@ -20,10 +20,12 @@ struct Light{
|
||||
uniform Light light[numLights];
|
||||
uniform sampler2D tex;
|
||||
uniform bool lightingEnabled;
|
||||
uniform bool texturingEnabled;
|
||||
uniform vec4 diffuseColor;
|
||||
uniform vec3 camPos;
|
||||
|
||||
void main(){
|
||||
vec4 finalColor=texture(tex,texCoords);
|
||||
vec4 finalColor=texturingEnabled?texture(tex,texCoords):diffuseColor;
|
||||
if(lightingEnabled){
|
||||
vec3 diffuseColor=vec3(0),specularColor;
|
||||
for(int i=0;i<numLights;i++){
|
||||
|
||||
@@ -2,15 +2,20 @@
|
||||
#define TEXTURE_H
|
||||
|
||||
#include<string>
|
||||
#include<ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
namespace vb01{
|
||||
class Texture{
|
||||
public:
|
||||
enum TextureType{TEXTURE_2D,TEXTURE_CUBEMAP};
|
||||
|
||||
Texture();
|
||||
Texture(FT_Face&,char);
|
||||
Texture(std::string);
|
||||
Texture(std::string[6]);
|
||||
void select();
|
||||
inline unsigned int* getTexture(){return &texture;}
|
||||
private:
|
||||
TextureType type;
|
||||
unsigned int texture;
|
||||
|
||||
Reference in New Issue
Block a user