C++, OpenGl :miért nem kezeli a piros színt ?

C++, OpenGl :miért nem kezeli a piros színt ?
2013-06-25T13:46:30+02:00
2013-06-26T09:33:32+02:00
2022-11-29T07:10:39+01:00
*deleted_29408213
Sziasztok !
Még kezdő vagyok OpenGl terén . Készítettem egy kis programot , (épp a textúrákat tanulom ) . A véleményeteket szeretném kikérni , hogy mit lehetne rajta javítani , esetleg mi az ami felesleg , hülyeség .Ami még nagy baj , hogy a piros színt a program nem kezeli megfelelően , és nem tudtam megcsinálni , hogy a textúrázott objektum eredeti(textúrázott)felületének színe ne változzon .
#include<iostream> #include<SFML\OpenGL.hpp> #include<SFML\Graphics.hpp> #include "own.h" #include "SOIL.h" #include "_DD_Texture_.h" GLfloat xrot,yrot,zrot; GLfloat Red=0.5 , Green=0.5 , Blue=0.5; GLuint texture[1]; void init() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_TEXTURE_2D); glShadeModel(GL_SMOOTH); glClearColor(0.0f, 0.0f, 0.0f,0.0f); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(90.f, 1.f, 1.f, 500.0f); } void Rotate(GLfloat xrot,GLfloat yrot,GLfloat zrot) { glRotatef(xrot,1.0f,0.0f,0.0f); glRotatef(yrot,0.0f,1.0f,0.0f); glRotatef(zrot,0.0f,0.0f,1.0f); } int main() { Draw Draw; sf::RenderWindow Window(sf::VideoMode( 1280,1050), "SFML Sample Application",sf::Style::Default, sf::ContextSettings(32)); bool running=true; while (running==true) { sf::Event event; while (Window.pollEvent(event)) { switch (event.type) { case sf::Event::Closed: { Window.close(); running=false; break; } case sf::Event::Resized: { // adjust the viewport when the window is resized glViewport(0, 0, event.size.width, event.size.height); } } if( event.type==sf::Event::KeyPressed ) { if( event.key.code==sf::Keyboard::R) { if(Red>1.0) {Red=0.0;} else {Red+=0.1;} std::cout<<"Red :"<<Red<<std::endl; } if (event.key.code==sf::Keyboard::G) { if(Green>1.0) {Green=0.0;} else {Green+=0.1;} std::cout<<"Green :"<<Green<<std::endl; } if (event.key.code==sf::Keyboard::B) { if(Blue>1.0) {Blue=0.0;} else {Blue+=0.1;} std::cout<<"Blue :"<<Blue<<std::endl; } if (event.key.code==sf::Keyboard::Space) { system("CLS"); } } if(event.type==sf::Event::KeyReleased ) {} } init(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0f,0.0f,-5.0f); LoadGLTextures(texture,"Data/NeHe.bmp"); glBindTexture(GL_TEXTURE_2D, texture[0]); Rotate( xrot, yrot, zrot); Draw.TextedCubeDraw(1.0); glLoadIdentity(); glColor3f(Red,Green,Blue); glTranslatef(+3.0f,0.0f,-5.0f); Rotate( xrot, yrot, zrot); Draw.CubeDraw(1.0); glLoadIdentity(); glColor3f(Red,Green,Blue); glTranslatef(-3.0f,0.0f,-5.0f); Rotate( xrot, yrot, zrot); Draw.CubeDraw(1.0); xrot+=0.8; yrot+=0.1; Window.display(); } return 0; }

_DD_Texture_ tartalma :
#ifndef _DD_Texture_ # define _DD_Texture_ int LoadGLTextures(GLuint texture[],char FileName[]) { texture[0] = SOIL_load_OGL_texture ( FileName, SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y ); if(texture[0] == 0) return false; // Typical Texture Generation Using Data From The Bitmap glBindTexture(GL_TEXTURE_2D, texture[0]); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); return true; } #endif
az own.h ban a textúrázott , és a sima négyzetet deklaráltam ..
Mutasd a teljes hozzászólást!
Jaj, tényleg, ezt is kérdezted. :)
A textúrázott objektum kirajzolása előtt engedélyezd a textúrázást (glEnable(GL_TEXTURE_2D), állitsd fehérre a szint (glColor3f(1.0, 1.0, 1.0)) és rajzold ki.
A többi object-et ha csak egy szinnel akarod rajzolni, akkor hogy ne zavarjon be, kapcsold ki előtte a textúrázást (glDisable(GL_TEXTURE_2D), majd állitsd be a szint (glColor3f) és rajzolás. Egyébként nem látom, hogy a szin értékei pirosra állitanád, mindhárom csatorna 0.5 értékkel van inicializálva.
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd