Форум: Форум C++Разное
Новые темы: 00
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите пожалуйста!
 
 автор: milk333   (11.03.2009 в 14:30)   письмо автору
 
 

Привет всем! нужна небольшая помощь! думаю для тех людей кто тут сидит, это будет дело плевое! У меня есть исходный год проги которая вырисовывает волос ( ну форму волоса, человека там не суть важно)! но есть одна проблема! В этом исходнике все данные там Радиус или высота и все такое расчитывается по формуле и следовательно волос ровный получается симметричный!
Я мне по заданию нужно сделать кроличий волос, а он в разрезе имеет разный радиус ( ну не ровный целиндор т.е. а такой целиндор с буграми и все такое). Теоретически я понимаю что достаточно загнать редомы на высоты между всеми радиусами из готорых строится данный волос. Но вот практически не получается! Уже который час читаю инфу и все такое и методом тыка пробую! Но все впустую!
Буду очень признателен, если кто поможет!
ИСХОДНИК я эту прогу делаю в VS.net 2005 С++
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>
#include <math.h>

int alpha=0, beta=0, gamma=0;
AUX_RGBImageRec* image;

void CALLBACK myReshape(GLsizei w, GLsizei h);
void CALLBACK display(void);

GLfloat mas_z[100][100][3];
GLfloat p, q;
GLfloat x, y, z, r, fi;
int i,j;

void myinit(void)
{
glClearColor(1.0, 1.0, 1.0, 1.0);
glEnable(GL_MAP2_VERTEX_3);
glMapGrid2f(20, 0.0, 1.0, 20, 0.0, 1.0);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_FLAT);
}

void CALLBACK display(void)
{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glPushMatrix();

glRotated(alpha, 0,1,0);
glRotated(beta, -1,0,0);
glRotated(gamma, 0,0,1);
glScalef(10, 10, 10);

p=0.1;
q=0.1;
r=3.1;

// первое волокно
glColor3d(1,0,0); // цвет волокна - красный =)

for (i=1; i<100; i++)
{
for (j=1; j<100; j++)
{
z = float(i)/10;

fi = float(j)*6.4/99; // делаем просчет по фи от 0 до 2 пи
r = (2+0.1*cos(fi))/4+sin(z)/10; // вычисляем радиус в зависимости от угла фи и высоты Зэт

x = float(r*cos(fi));
y = float(r*sin(fi));
mas_z[i][j][1] = x;
mas_z[i][j][2] = y;
mas_z[i][j][3] = z-5;

}
}

for (j = 1; j < 100; j++)
{
glBegin (GL_LINE_STRIP);
for (i = 1; i < 100; i++)
{
glVertex3f(mas_z[i][j][1],mas_z[i][j][2],mas_z[i][j][3]);
}
glEnd();
}

for (i = 1; i < 100; i++)
{
glBegin (GL_LINE_STRIP);
for (j = 1; j < 100; j++)
{
glVertex3f(mas_z[i][j][1],mas_z[i][j][2],mas_z[i][j][3]);
}
glEnd();
}


glPopMatrix();
glFlush();
auxSwapBuffers();

}


void CALLBACK mouse(AUX_EVENTREC *event)
{

static int x0,z0,y0=-12345;
if(y0!=-12345)
{
alpha += event->data[AUX_MOUSEX] - x0;
beta += event->data[AUX_MOUSEY] - y0;
gamma += event->data[AUX_MOUSEY] - z0;
}
x0 = event->data[AUX_MOUSEX];
y0 = event->data[AUX_MOUSEY];
z0 = event->data[AUX_MOUSEY];

}



void CALLBACK myReshape(GLsizei w, GLsizei h)
{
h = (h == 0) ? 1 : h;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

if (w <= h)
glOrtho(-50.0, 50.0, -50.0*(GLfloat)h/(GLfloat)w,
50.0*(GLfloat)h/(GLfloat)w, -50.0, 50.0);
else
glOrtho(-50.0*(GLfloat)w/(GLfloat)h,
50.0*(GLfloat)w/(GLfloat)h, -50.0, 50.0, -50.0, 50.0);
glMatrixMode(GL_MODELVIEW);
// glLoadIdentity();
}

int main(int argc, char** argv)
{
auxInitDisplayMode( AUX_RGB | AUX_DEPTH | AUX_DOUBLE );
glEnable(GL_DEPTH_TEST);
glEnable(GL_AUTO_NORMAL);


auxInitPosition (0, 0, 1000, 1000);
auxInitWindow ("Bezier Curves Using Evaluators");
auxReshapeFunc (myReshape);
auxMouseFunc(AUX_LEFTBUTTON, AUX_MOUSELOC, mouse);



auxMainLoop(display);
return(0);
}

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования