• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dlaczego ten kod musi być wewnątrz pętli?

Object Storage Arubacloud
0 głosów
147 wizyt
pytanie zadane 2 kwietnia 2017 w C i C++ przez Avernis Nałogowiec (27,400 p.)

Cześć, postanowiłem się trochę pobawić OpenGL'em i zrobiłem taki kod:


#include "Figure.h"



Figure::Figure(std::vector<GLfloat> &points)
{
	glGenBuffers(1, &vbo); //zapisanie 1 bufora do zmiennej
	glBindBuffer(GL_ARRAY_BUFFER, vbo); //pokazujemy cel bufora, w tym przypadku bufor jest tablicą danych
	glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * points.size(), points.data(), GL_STATIC_DRAW); //podajemy cel, rozmiar tablicy, wskaźnik na tablicę, przewidywane zastosowanie tych danych

	glGenVertexArrays(1, &vao); //zwraca indeks tablicy wierzchołków
	glBindVertexArray(vao); //Uaktywnia tablicę
	glBindBuffer(GL_ARRAY_BUFFER, vbo); 
	glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, nullptr); //definiuje cechy figury(id, ile wymiarów, typ)
	glEnableVertexAttribArray(0); //uaktywnia id 

	this->points = points.size() / 3;
}		


Figure::~Figure()
{
}

void Figure::draw()
{
	glBindVertexArray(vao);   
	glDrawArrays(GL_TRIANGLES, 0, points);
}

void Figure::setPosition(const glm::vec3 &position)
{
	this->position = position;
}
void Figure::setRotation(const glm::vec3 &rotation)
{
	this->rotation = rotation;
}
void Figure::setScale(const glm::vec3 &scale)
{
	this->scale = scale;
}
void Figure::sendTransforms()
{
	transformPosition = glm::translate(glm::mat4(1.0f), position);
	transformRot = glm::rotate(transformPosition, rotation.x, glm::vec3(1, 0, 0));
	transformRot = glm::rotate(transformRot, rotation.y, glm::vec3(0, 1, 0));
	transformRot = glm::rotate(transformRot, rotation.z, glm::vec3(0, 0, 1));
	transformScale = glm::scale(transformRot, scale);

	glUniformMatrix4fv(MainShader::transformUniform, 1, GL_FALSE, glm::value_ptr(transformScale));
}

I chciałbym się dowiedzieć, dlaczego jeżeli nie użyję sendTransforms(), to nie rysuje mi obiektu?

Kod shadera wygląda tak:

 

#version 330 

layout(location = 0) in vec3 position; 

uniform mat4 transMatrix; 
uniform mat4 viewMatrix; 
uniform mat4 perspectiveMatrix;
 
void main()  
{    
	gl_Position = perspectiveMatrix * viewMatrix  * transMatrix *	 vec4(position, 1.0); 
} 	

 

1 odpowiedź

0 głosów
odpowiedź 2 kwietnia 2017 przez Wiciorny Ekspert (269,810 p.)
Jak nie użyjesz sendTransform, rysuje Ci obiekt... ale go niewidzisz. Dlaczego? Bo w send transforms ustalanie masz pozycji, jeśli program nie zna pozycji obiektu- wali się wszsystko po kolei. Może i rysuje, ale obiekt ten nie ma swojego miejsca
komentarz 2 kwietnia 2017 przez Avernis Nałogowiec (27,400 p.)
Poczekaj... Czyli jak coś wyślę do shadera przed pętlą, to to nie działa?

Podobne pytania

+1 głos
4 odpowiedzi 683 wizyt
pytanie zadane 17 czerwca 2016 w Java przez Daniel Dzwonkowski Nowicjusz (230 p.)
0 głosów
0 odpowiedzi 165 wizyt
pytanie zadane 12 sierpnia 2020 w OpenGL, Unity przez tonn204 Mądrala (7,440 p.)
0 głosów
0 odpowiedzi 84 wizyt
pytanie zadane 11 sierpnia 2020 w OpenGL, Unity przez tonn204 Mądrala (7,440 p.)

92,568 zapytań

141,422 odpowiedzi

319,629 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...