- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我花了一些时间,但我能够成功地实现菱形方形算法来使用 OpenGL 绘制等 ionic 分形。它是通过使用每次生成场景时使用的递归函数来实现的(我猜)。接下来我想做的是添加一些额外的功能,让观众在生成的分形周围移动。但是,问题是我无法让它工作...所以这是我的问题:
能不能让算法渲染一次? (我没有使用任何数组来记录生成的点或颜色)是否只是修改渲染场景来做到这一点?
我怎样才能去掉正方形之间的灰色空间?
如果除了保留值的记录(即在数组中)之外没有其他方法可以做到这一点,你能给我一个这样做的建议吗,因为我在设置数组的索引时迷路了.. .
这是代码(不过注释以及一些变量是经过修饰的):
#include <Windows.h>
#include <gl\GL.h>
#include <glut.h>
#include <iostream>
#include <time.h>
#include <math.h>
#include <random>
using namespace std;
typedef float point3[3];
GLfloat ile;
bool kolor = 0;
bool gauss = 0;
int model = 0; // 0- siatka, 1 - trójkąty, 2-próba
static const double pi = 3.1415927;
static GLfloat theta[] = { 0.0, 0.0, 0.0 }; //trzy kąty obroty wokół osi x, y, z
void RenderScene(void);
void sr_boku(GLfloat x, GLfloat y, GLfloat z, GLfloat w, GLfloat h, GLfloat c1, GLfloat c2, GLfloat c3, GLfloat c4);
//Rozkład Gaussa
double normal(double mean, double std)
{
default_random_engine generator;
normal_distribution<double> distribution(mean, std);
return distribution(generator);
//std*sqrt(-2 * log(rand() + 1) / (RAND_MAX + 1))*sin(2 * pi * rand() / (RAND_MAX + 1)) + mean;
}
class Kolor
{
public:
GLfloat r;
GLfloat g;
GLfloat b;
};
//Funkcja reagująca na naciskane klawisze
void czytajKlawisz(unsigned char key, int x, int y)
{
switch (key)
{
case '=':
case '+':
{
ile = ile * 2;
break;
}
case '-':
{
ile = ile / 2;
break;
}
case 'k':
{
if (kolor == 0)
kolor = 1;
else
kolor = 0;
break;
}
case 'g':
{
if (gauss == 0)
gauss = 1;
else
gauss = 0;
}
case '1':
case 's':
{
model = 0;
break;
}
case '2':
case 't':
{
model = 1;
break;
}
case '3':
case 'p':
{
model = 2;
break;
}
case 27:
break;
}
glutPostRedisplay();
}
void koloruj(GLfloat c, Kolor &kolor)
{
if (c < 0.5)
kolor.r = c * 2;
else
kolor.r = (1.0 - c) * 2;
if (c >= 0.3 && c < 0.8)
kolor.g = (c - 0.3) * 2;
else if (c < 0.3)
kolor.g = (0.3 - c) * 2;
else
kolor.r = (1.3 - c) * 2;
if (c >= 0.5)
kolor.b = (c - 0.5) * 2;
else
kolor.b = (0.5 - c) * 2;
}
GLfloat displace(GLfloat num, int max, int ziarno)
{
GLfloat m = num / (float)(max)* ziarno;
return ((GLfloat)(rand() % 101)*0.01f - 0.5f) * m;
}
//Wyrysowanie osi układu współrzędnych
void Axes(void)
{
point3 xmin = { -5.0f, 0.0f, 0.0f };
point3 xmax = { 5.0f, 0.0f, 0.0f };
point3 ymin = { 0.0f, -5.0f, 0.0f };
point3 ymax = { 0.0f, 5.0f, 0.0f };
point3 zmin = { 0.0f, 0.0f, -5.0f };
point3 zmax = { 0.0f, 0.0f, 5.0f };
glRotated(45.0, 1.0, -0.1, 0.1);
glColor3f(10.0f, 0.0f, 0.0f); //Ustawienie koloru rysowania na czerwony -oś X
glBegin(GL_LINES);
glVertex3fv(xmin);
glVertex3fv(xmax);
glEnd();
glColor3f(0.0f, 10.0f, 0.0f); //Ustawienie koloru rysowania na zielony -oś Y
glBegin(GL_LINES);
glVertex3fv(ymin);
glVertex3fv(ymax);
glEnd();
glColor3f(0.0f, 0.0f, 01.0f); //Ustawienie kolory rysowania na niebieski -oś Z
glBegin(GL_LINES);
glVertex3fv(zmin);
glVertex3fv(zmax);
glEnd();
}
//Funkcja zwrotną odpowiedzialna za obrót modelu wokół osi
void spin()
{
theta[0] -= 0.000005;
if (theta[0] > 360.0)
theta[0] -= 360.0;
theta[1] -= 0.000005;
if (theta[1] > 360)
theta[1] -= 360.0;
theta[2] -= 0.00005;
if (theta[2] > 360.0)
theta[2] -= 360.0;
glutPostRedisplay(); //odświeżenie zawartości aktualnego okna
}
//Fraktal
void fraktal(int w, int h)
{
float c1, c2, c3, c4;
int x, y;
x = w / 2;
y = h / 2;
GLfloat z = (GLfloat)(rand() % 101) / 10.0f;
c1 = (GLfloat)(rand() % 101) / 100.0f;
c2 = (GLfloat)(rand() % 101) / 100.0f;
c3 = (GLfloat)(rand() % 101) / 100.0f;
c4 = (GLfloat)(rand() % 101) / 100.0f;
sr_boku(-x, -y, z, w, h, c1, c2, c3, c4);
}
//Główna funkcja rysująca
void sr_boku(GLfloat x, GLfloat y, GLfloat z, GLfloat w, GLfloat h, GLfloat c1, GLfloat c2, GLfloat c3, GLfloat c4)
{
GLfloat middle;
GLfloat w1, w2, w3, w4;
GLfloat new_w = w / 2.0f;
GLfloat new_h = h / 2.0f;
//inne podejście
if (model == 0) //siatka
{
if (h> ile || w > ile)
{
middle = (c1 + c2 + c3 + c4)*0.25 + displace(h + w, 30, 3);
w1 = (c1 + c2) / 2.0f;
w2 = (c2 + c3) / 2.0f;
w3 = (c3 + c4) / 2.0f;
w4 = (c4 + c1) / 2.0f;
if (middle > 1.0f)
middle = 1.0f;
if (middle < 0.0f)
middle = 0.5f;
sr_boku(x, y, z, new_w, new_h, w4, middle, w3, c4);// , n - 1);
sr_boku(x + new_w, y, z, new_w, new_h, middle, w2, c3, w3);// , n - 1);
sr_boku(x + new_w, y+new_h, z, new_w, new_h, w1, c2, w2, middle);// , n - 1);
sr_boku(x, y+new_h, z, new_w, new_h, c1, w1, middle, w4);// , n - 1);
}
else
{
GLfloat z1 = c1 * 5;
GLfloat z2 = c2 * 5;
GLfloat z3 = c3 * 5;
GLfloat z4 = c4 * 5;
Kolor kk;
glBegin(GL_QUADS);
koloruj(c1, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x, y + new_h, z1 - 2.5f);
koloruj(c2, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x + new_w, y + new_h, z2 - 2.5f);
koloruj(c3, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x + new_w, y, z3 - 2.5f);
koloruj(c4, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x, y, z4 - 2.5f);
glEnd();
}
}
if (model == 1) //trójkąty
{
if (h> ile || w > ile)
{
middle = (c1 + c2 + c3 + c4)*0.25 + displace(h + w, 60, 3);
w1 = (c1 + c2) / 2.0f;
w2 = (c2 + c3) / 2.0f;
w3 = (c3 + c4) / 2.0f;
w4 = (c4 + c1) / 2.0f;
if (middle > 1.0f)
middle = 1.0f;
if (middle < 0.0f)
middle = 0.0f;
sr_boku(x, y, z, new_w, new_h, w4, middle, w3, c4);// , n - 1);
sr_boku(x + new_w, y, z, new_w, new_h, middle, w2, c3, w3);// , n - 1);
sr_boku(x + new_w, y +new_h, z, new_w, new_h, w1, c2, w2, middle);// , n - 1);
sr_boku(x, y+new_h, z, new_w, new_h, c1, w1, middle, w4);// , n - 1);
}
else
{
GLfloat z1 = c1 * 5;
GLfloat z2 = c2 * 5;
GLfloat z3 = c3 * 5;
GLfloat z4 = c4 * 5;
Kolor kk;
glBegin(GL_TRIANGLE_FAN);
koloruj(c1, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x, y + new_h, z1 - 2.5f);
koloruj(c2, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x + new_w, y + new_h, z2 - 2.5f);
koloruj(c3, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x + new_w, y, z3 - 2.5f);
koloruj(c4, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x, y, z4 - 2.5f);
glEnd();
}
}
if (model == 2) //proby
{
if (h > ile || w > ile)
{
middle = (c1 + c2 + c3 + c4)*0.25 + displace(h + w, 60, 3);
w1 = (c1 + c2) / 2.0f;
w2 = (c2 + c3) / 2.0f;
w3 = (c3 + c4) / 2.0f;
w4 = (c4 + c1) / 2.0f;
if (middle > 1.0f)
middle = 1.0f;
if (middle < 0.0f)
middle = 0.0f;
sr_boku(x, y, z, new_w, new_h, w4, middle, w3, c4);// , n - 1);
sr_boku(x + new_w, y, z, new_w, new_h, middle, w2, c3, w3);// , n - 1);
sr_boku(x + new_w, y + new_h, z, new_w, new_h, w1, c2, w2, middle);// , n - 1);
sr_boku(x, y + new_h, z, new_w, new_h, c1, w1, middle, w4);// , n - 1);
}
else
{
GLfloat z1 = normal(5, 5);
GLfloat z2 = normal(5, 5);
GLfloat z3 = normal(5, 5);
GLfloat z4 = normal(5, 5);
Kolor kk;
glBegin(GL_TRIANGLES);
koloruj(c1, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x, y + new_h, z1 - 2.5f);
koloruj(c2, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x + new_w, y + new_h, z2 - 2.5f);
koloruj(c4, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x, y, z4 - 2.5f);
glEnd();
glBegin(GL_TRIANGLES);
koloruj(c2, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x + new_w, y + new_h, z2 - 2.5f);
koloruj(c3, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x, y, z4 - 2.5f);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x + new_w, y, z3 - 2.5f);
koloruj(c4, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x, y, z4 - 2.5f);
glEnd();
}
}
}
// Funkcjs określająca co ma byc narysowane
void RenderScene(void)
{
// Czyszczenie okna aktualnym kolorem czyszczącym
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
srand(time(NULL));
//Obrócenie modelu wokół osi x, y, z
//glRotatef(theta[0], 0.01, 0.0, 0.0);
//glRotatef(theta[1], 0.0, 0.01, 0.0);
//glRotatef(theta[2], 0.0, 0.0, 0.01);
Axes();
fraktal(60, 60);
//fraktal(-90, 90, 180);
// Przekazanie poleceń rysujących do wykonania
glFlush();
glutSwapBuffers();
}
// Funkcja ustalająca stan renderowania
void MyInit(void)
{
// Kolor wnętrza okna - szary
glClearColor(0.5, 0.5f, 0.5f, 1.0f);
}
// Funkcja zachowująca proporcje rysowanych obiektów
void ChangeSize(GLsizei horizontal, GLsizei vertical)
{
GLfloat AspectRatio;
if (vertical == 0)
vertical = 1;
//Ustawienia wielkości okna urządzenia
glViewport(0, 0, horizontal, vertical);
// Określenie układu współrzędnych obserwatora
glMatrixMode(GL_PROJECTION);
// Określenie przestrzeni ograniczającej
glLoadIdentity();
// Współczynnik proporcji okna
AspectRatio = (GLfloat)horizontal / (GLfloat)vertical;
if (horizontal <= vertical)
glOrtho(-7.5, 7.5, -7.5 / AspectRatio, 7.5 / AspectRatio, 10.0, -10.0);
else
glOrtho(-7.5*AspectRatio, 7.5*AspectRatio, -7.5, 7.5, 10.0, -10.0);
// Określenie układu współrzędnych
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void main(void)
{
//wywołanie funkcji wypełniającej funkcje W(x) i Wc(x)
//funkcja_grey(250);
ile = 0.1;
// Ustawienia trybu wyświetlania (podwójny or rgb or głęboki)
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
// Utworzenie okna z nazwą na pasku stanu
glutCreateWindow("Fraktal Plazmowy w 3d v0.8");
//Funkcja reagująca na naciskane klawisze
glutKeyboardFunc(czytajKlawisz);
// Określenie funkcji RenderScene jako funkcji zwrotnej
glutDisplayFunc(RenderScene);
//Funkcja rejestrująca funkcje zwrotną
//glutIdleFunc(spin);
// Określenie funkcji zwrotnej odpowiedzialnej za rozmiar okna
glutReshapeFunc(ChangeSize);
// Wykonanie wszelki przygotowań przed rozpoczęciem renderowania
MyInit();
glEnable(GL_DEPTH_TEST);
// Uruchomienie szkieletu biblioteki GLUT
glutMainLoop();
}
这是它的样子:
最佳答案
如果您不能或不愿重构您的生成器以吐出几何图形而不是 OpenGL 调用,您可以使用显示列表来捕获输出:
#include <GL/glut.h>
#include <iostream>
#include <time.h>
#include <cmath>
#include <random>
using namespace std;
typedef float point3[3];
GLfloat ile;
int model = 0; // 0- siatka, 1 - trójkąty, 2-próba
static const double pi = 3.1415927;
//Rozkład Gaussa
double normal(double mean, double std)
{
default_random_engine generator;
normal_distribution<double> distribution(mean, std);
return distribution(generator);
}
class Kolor
{
public:
GLfloat r;
GLfloat g;
GLfloat b;
};
void koloruj(GLfloat c, Kolor &kolor)
{
if (c < 0.5)
kolor.r = c * 2;
else
kolor.r = (1.0 - c) * 2;
if (c >= 0.3 && c < 0.8)
kolor.g = (c - 0.3) * 2;
else if (c < 0.3)
kolor.g = (0.3 - c) * 2;
else
kolor.r = (1.3 - c) * 2;
if (c >= 0.5)
kolor.b = (c - 0.5) * 2;
else
kolor.b = (0.5 - c) * 2;
}
GLfloat displace(GLfloat num, int max, int ziarno)
{
GLfloat m = num / (float)(max)* ziarno;
return ((GLfloat)(rand() % 101)*0.01f - 0.5f) * m;
}
//Główna funkcja rysująca
void sr_boku(GLfloat x, GLfloat y, GLfloat z, GLfloat w, GLfloat h, GLfloat c1, GLfloat c2, GLfloat c3, GLfloat c4)
{
GLfloat middle;
GLfloat w1, w2, w3, w4;
GLfloat new_w = w / 2.0f;
GLfloat new_h = h / 2.0f;
//inne podejście
if (model == 0) //siatka
{
if (h> ile || w > ile)
{
middle = (c1 + c2 + c3 + c4)*0.25 + displace(h + w, 30, 3);
w1 = (c1 + c2) / 2.0f;
w2 = (c2 + c3) / 2.0f;
w3 = (c3 + c4) / 2.0f;
w4 = (c4 + c1) / 2.0f;
if (middle > 1.0f)
middle = 1.0f;
if (middle < 0.0f)
middle = 0.5f;
sr_boku(x, y, z, new_w, new_h, w4, middle, w3, c4);// , n - 1);
sr_boku(x + new_w, y, z, new_w, new_h, middle, w2, c3, w3);// , n - 1);
sr_boku(x + new_w, y+new_h, z, new_w, new_h, w1, c2, w2, middle);// , n - 1);
sr_boku(x, y+new_h, z, new_w, new_h, c1, w1, middle, w4);// , n - 1);
}
else
{
GLfloat z1 = c1 * 5;
GLfloat z2 = c2 * 5;
GLfloat z3 = c3 * 5;
GLfloat z4 = c4 * 5;
Kolor kk;
glBegin(GL_QUADS);
koloruj(c1, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x, y + new_h, z1 - 2.5f);
koloruj(c2, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x + new_w, y + new_h, z2 - 2.5f);
koloruj(c3, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x + new_w, y, z3 - 2.5f);
koloruj(c4, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x, y, z4 - 2.5f);
glEnd();
}
}
if (model == 1) //trójkąty
{
if (h> ile || w > ile)
{
middle = (c1 + c2 + c3 + c4)*0.25 + displace(h + w, 60, 3);
w1 = (c1 + c2) / 2.0f;
w2 = (c2 + c3) / 2.0f;
w3 = (c3 + c4) / 2.0f;
w4 = (c4 + c1) / 2.0f;
if (middle > 1.0f)
middle = 1.0f;
if (middle < 0.0f)
middle = 0.0f;
sr_boku(x, y, z, new_w, new_h, w4, middle, w3, c4);// , n - 1);
sr_boku(x + new_w, y, z, new_w, new_h, middle, w2, c3, w3);// , n - 1);
sr_boku(x + new_w, y +new_h, z, new_w, new_h, w1, c2, w2, middle);// , n - 1);
sr_boku(x, y+new_h, z, new_w, new_h, c1, w1, middle, w4);// , n - 1);
}
else
{
GLfloat z1 = c1 * 5;
GLfloat z2 = c2 * 5;
GLfloat z3 = c3 * 5;
GLfloat z4 = c4 * 5;
Kolor kk;
glBegin(GL_TRIANGLE_FAN);
koloruj(c1, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x, y + new_h, z1 - 2.5f);
koloruj(c2, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x + new_w, y + new_h, z2 - 2.5f);
koloruj(c3, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x + new_w, y, z3 - 2.5f);
koloruj(c4, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x, y, z4 - 2.5f);
glEnd();
}
}
if (model == 2) //proby
{
if (h > ile || w > ile)
{
middle = (c1 + c2 + c3 + c4)*0.25 + displace(h + w, 60, 3);
w1 = (c1 + c2) / 2.0f;
w2 = (c2 + c3) / 2.0f;
w3 = (c3 + c4) / 2.0f;
w4 = (c4 + c1) / 2.0f;
if (middle > 1.0f)
middle = 1.0f;
if (middle < 0.0f)
middle = 0.0f;
sr_boku(x, y, z, new_w, new_h, w4, middle, w3, c4);// , n - 1);
sr_boku(x + new_w, y, z, new_w, new_h, middle, w2, c3, w3);// , n - 1);
sr_boku(x + new_w, y + new_h, z, new_w, new_h, w1, c2, w2, middle);// , n - 1);
sr_boku(x, y + new_h, z, new_w, new_h, c1, w1, middle, w4);// , n - 1);
}
else
{
GLfloat z1 = normal(5, 5);
GLfloat z2 = normal(5, 5);
GLfloat z3 = normal(5, 5);
GLfloat z4 = normal(5, 5);
Kolor kk;
glBegin(GL_TRIANGLES);
koloruj(c1, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x, y + new_h, z1 - 2.5f);
koloruj(c2, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x + new_w, y + new_h, z2 - 2.5f);
koloruj(c4, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x, y, z4 - 2.5f);
glEnd();
glBegin(GL_TRIANGLES);
koloruj(c2, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x + new_w, y + new_h, z2 - 2.5f);
koloruj(c3, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x, y, z4 - 2.5f);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x + new_w, y, z3 - 2.5f);
koloruj(c4, kk);
glColor3f(kk.r, kk.g, kk.b);
glVertex3f(x, y, z4 - 2.5f);
glEnd();
}
}
}
//Fraktal
void fraktal(int w, int h)
{
float c1, c2, c3, c4;
int x, y;
x = w / 2;
y = h / 2;
GLfloat z = (GLfloat)(rand() % 101) / 10.0f;
c1 = (GLfloat)(rand() % 101) / 100.0f;
c2 = (GLfloat)(rand() % 101) / 100.0f;
c3 = (GLfloat)(rand() % 101) / 100.0f;
c4 = (GLfloat)(rand() % 101) / 100.0f;
sr_boku(-x, -y, z, w, h, c1, c2, c3, c4);
}
GLuint list = 0;
void RebuildList()
{
if( list > 0 ) glDeleteLists( list, 1 );
list = glGenLists( 1 );
glNewList( list, GL_COMPILE );
fraktal(60, 60);
//fraktal(-90, 90, 180);
glEndList();
}
//Funkcja reagująca na naciskane klawisze
void czytajKlawisz(unsigned char key, int x, int y)
{
switch (key)
{
case '=':
case '+':
{
ile = ile * 2;
RebuildList();
break;
}
case '-':
{
ile = ile / 2;
RebuildList();
break;
}
case '1':
case 's':
{
model = 0;
RebuildList();
break;
}
case '2':
case 't':
{
model = 1;
RebuildList();
break;
}
case '3':
case 'p':
{
model = 2;
RebuildList();
break;
}
case 27:
break;
}
glutPostRedisplay();
}
GLfloat theta[] = { 0.0, 0.0, 0.0 }; //trzy kąty obroty wokół osi x, y, z
void timer( int value )
{
theta[0] += 0.05;
if (theta[0] > 360.0)
theta[0] -= 360.0;
theta[1] += 0.05;
if (theta[1] > 360)
theta[1] -= 360.0;
theta[2] += 0.05;
if (theta[2] > 360.0)
theta[2] -= 360.0;
glutTimerFunc( 16, timer, 0 );
glutPostRedisplay(); //odświeżenie zawartości aktualnego okna
}
//Wyrysowanie osi układu współrzędnych
void Axes(void)
{
point3 xmin = { -5.0f, 0.0f, 0.0f };
point3 xmax = { 5.0f, 0.0f, 0.0f };
point3 ymin = { 0.0f, -5.0f, 0.0f };
point3 ymax = { 0.0f, 5.0f, 0.0f };
point3 zmin = { 0.0f, 0.0f, -5.0f };
point3 zmax = { 0.0f, 0.0f, 5.0f };
glPushMatrix();
glRotated(45.0, 1.0, -0.1, 0.1);
glBegin(GL_LINES);
glColor3f(10.0f, 0.0f, 0.0f); //Ustawienie koloru rysowania na czerwony -oś X
glVertex3fv(xmin);
glVertex3fv(xmax);
glColor3f(0.0f, 10.0f, 0.0f); //Ustawienie koloru rysowania na zielony -oś Y
glVertex3fv(ymin);
glVertex3fv(ymax);
glColor3f(0.0f, 0.0f, 01.0f); //Ustawienie kolory rysowania na niebieski -oś Z
glVertex3fv(zmin);
glVertex3fv(zmax);
glEnd();
glPopMatrix();
}
void RenderScene(void)
{
glClearColor(0.5, 0.5f, 0.5f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
float horizontal = glutGet( GLUT_WINDOW_WIDTH );
float vertical = glutGet( GLUT_WINDOW_HEIGHT );
GLfloat AspectRatio = (GLfloat)horizontal / (GLfloat)vertical;
glOrtho(-7.5*AspectRatio, 7.5*AspectRatio, -7.5, 7.5, 100.0, -10.00);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//Obrócenie modelu wokół osi x, y, z
glRotatef(theta[0], 1, 0, 0);
glRotatef(theta[1], 0, 1, 0);
glRotatef(theta[2], 0, 0, 1);
Axes();
glCallList( list );
glutSwapBuffers();
}
void main( int argc, char** argv )
{
//wywołanie funkcji wypełniającej funkcje W(x) i Wc(x)
//funkcja_grey(250);
ile = 0.1;
glutInit( &argc, argv );
glutInitWindowSize( 800,600 );
glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH );
glutCreateWindow("Fraktal Plazmowy w 3d v0.8");
glutKeyboardFunc(czytajKlawisz);
glutDisplayFunc(RenderScene);
glutTimerFunc( 16, timer, 0 );
glEnable(GL_DEPTH_TEST);
srand(time(NULL));
RebuildList();
glutMainLoop();
}
我强烈建议排除影响fraktal()
的全局变量。
关于c++ - 飞越等 ionic 分形 - 菱形方算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20554769/
我正在尝试创建带有固定三 Angular 形导航的网页。 问题是我无法将较小的三 Angular 形放入大三 Angular 形中,如下图所示。 当调整窗口大小时三 Angular 形正在改变它的 A
我目前正在使用 Angular-material,但我在另一个项目中遇到了一种情况,迫使我使用类似 angular material chips 的东西。效果如本链接所述。 对我来说主要的麻烦是我想在
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 6 年前。 Improve this ques
我通过将一个正方形旋转 45 度创建了一个菱形: .shape { height: 50px; width: 50px; transform: rotate(45deg); } 是否
我使用 css 创建了一个三 Angular 形: .box { width: 0; height: 0; border-style: solid; border-width: 540px 964px
如何创建边框三 Angular 形? 我唯一能想到的就是做一个三 Angular 形 .triangle { width: 0; height: 0;
我想创建一个旋转函数,在该函数中我的三 Angular 形可以像轮子一样自行旋转,但我与移动三 Angular 形的部分代码发生冲突,我尝试了许多解决方案但没有成功,也许如果你们中的一个人知道它会对人
我正在使用线性垫步进器。 它与 next 一起工作正常。我进行 api 调用,如果成功,则调用 stepper-next 事件而不是使用 matStepperNext 指令。 现在,当用户在第 1 步
我想根据用户的 onClick 事件将 V 形从 down 更改为 up。我尝试过使用其他人的其他示例,但没有成功。 这是我的JSFiddle . 最佳答案 嗯,您的 JSFiddle 设置存在一些问
我想在鼠标单击的地方绘制一个 2D 三 Angular 形。已经制作了鼠标事件处理程序,并且可以看到鼠标单击的点。我在缓冲区对象中写入了三 Angular 形的顶点位置。它将是三 Angular 形大
有人可以告诉我我在 Javascript 中的帕斯卡三 Angular 形上做错了什么吗?我看到一个已经存在的使用递归的线程,但是,在没有逐字复制的情况下,在我看来,代码看起来太相似,无法破译我做错了
我必须为我的类(class)使用星号制作一个三 Angular 形和倒三 Angular 形。 我已经制作了上半部分,但是,我在制作上下颠倒的部分时遇到了很大的麻烦 for(var count=1;
我想获取围绕一个点的三 Angular 形的点,其中面指向指定法线的方向。我将使用 THREE.js 将它们添加到 BufferGeometry。 非常粗略的绘图: 这是我到目前为止的代码: //Th
我从编程开始。我正在使用 JavaScript。 为了练习,我打印了一个像这样的三 Angular 形: * ** *** **** ***** 但我想从右向左打印,如下所示: * **
我需要在 Joint JS 中创建一些以圆形源开头并以三 Angular 形结尾的链接,反之亦然,得到了这个,但它不起作用: var link1 = new joint.dia.Link({
这个问题已经有答案了: 奥 git _a (1 个回答) 已关闭 6 年前。 我做了一些安静的搜索,发现了很多将星星和其他形状输出到无数图案中的方法,但我还没有找到任何关于如何使用用户生成的短语来做到
我正在尝试仅使用递归打印出字母 V 的形状。我在这个网站上看到了一些与我的问题相关的代码,但大多数使用循环而不是递归。 这是我的代码: public class Pattern { pub
这个问题在这里已经有了答案: How to Make A Chevron Arrow Using CSS? (10 个答案) 关闭 7 年前。 我想给this triangle中间略有下降,我不想要
我的问题是关于使用 Javascript 对其边进行三 Angular 形评估。以下代码是非常初始的版本,即使它可以工作。我想知道它是否可以更简化,或者有其他方法可以达到相同的结果。 谢谢! let
function makeLine(length) { var line = ""; for (var i = 1; i <= length; i++) { for (var j =
我是一名优秀的程序员,十分优秀!