Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 3D в перле 
:(
    Опции темы
frenkys
Дата 29.1.2006, 04:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 18.6.2005

Репутация: 1
Всего: 1



Может ктонибудь интересовался как можно например получить посредством перла скриншот какого
нибудь оьекта из файла .obj ?


--------------------
 niva[frenky]
PM MAIL WWW   Вверх
korob2001
Дата 29.1.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Если я правильно тебя понял, тебя интересует программирование графики какой-либо графической библиотеки, например: OpenGL. Если да, то вот посмотри такой пример:
Код

#!/usr/bin/perl
use strict;
use warnings;
use OpenGL qw(:all);

my $spin = 0.0;
my $toggle = 0;

my @light0_position = (2.0, 8.0, 2.0, 0.0);
my @mat_specular    = (1.0, 1.0, 1.0, 1.0);
my @mat_shininess        = (50.0);
my @mat_amb_diff_color     = (0.5, 0.7, 0.5, 0.5);
my @light_diffuse = (1.0, 1.0, 1.0, 1.0);
my @light_ambient = (0.15, 0.15, 0.15, 0.15);
my @light_specular = (1.0, 1.0, 1.0, 1.0);

sub init {
  glClearColor(1.0, 1.0, 1.0, 1.0);
  glShadeModel(GL_SMOOTH);
  glEnable(GL_DEPTH_TEST);
  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT0);
}

sub display {
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLightfv_p(GL_LIGHT0, GL_POSITION, @light0_position);
  glLightfv_p(GL_LIGHT0, GL_DIFFUSE, @light_diffuse);
  glLightfv_p(GL_LIGHT0, GL_AMBIENT, @light_ambient);
  glLightfv_p(GL_LIGHT0, GL_SPECULAR, @light_specular);
  glMaterialfv_p(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, @mat_amb_diff_color);
  glLoadIdentity();
  gluLookAt(2.0, 4.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
  glPushMatrix();
  glScalef(2.0, 2.0, 2.0);
  glRotatef($spin, 0.0, 1.0, 0.0);
  glutSolidTeapot(1.0);
  glPopMatrix();
  glutSwapBuffers();
}

sub reshape {
  my ($w, $h) = @_;
  glViewport(0, 0, $w, $h);
  glMatrixMode (GL_PROJECTION);
  glLoadIdentity ();        #  define the projection
  gluPerspective(45.0, $h ? $w/$h : 0, 1.0, 20.0);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
}

sub spinDisplay {
  $spin += 1.0;
  $spin = $spin - 360.0 if ($spin >360.0);
  glutPostRedisplay();
}

sub mouse {
  my ($button, $state, $x, $y) = @_;
  if ($button == GLUT_LEFT_BUTTON) {
    glutIdleFunc(\&spinDisplay) if ($state == GLUT_DOWN);
  }
  elsif ($button == GLUT_RIGHT_BUTTON) {
    glutIdleFunc(undef) if ($state == GLUT_DOWN);
  }
}

glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowPosition (0, 0);
glutInitWindowSize(300, 300);
glutCreateWindow ("Teapot");
init ();
glutDisplayFunc(\&display);
glutReshapeFunc(\&reshape);
glutMouseFunc(\&mouse);
glutIdleFunc(\&spinDisplay);
glutMainLoop();

__END__

Только это не мой код, это чей-то из сети. Автора к сожелению не помню.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
korob2001
Дата 29.1.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Немного изменил код выше, получился вращающийся кубик. ;))))))
Код

#!/usr/bin/perl -w                                                                                                                                                                                                                         #!/usr/bin/perl

use strict;
use OpenGL qw(:all);

my $spin = 0.0;
my $vpin = 0.0;
my $toggle = 0;

my @light0_position = (2.0, 8.0, 2.0, 0.0);
my @mat_specular    = (1.0, 1.0, 1.0, 1.0);
my @mat_shininess        = (50.0);
my @mat_amb_diff_color     = (0.9, 0.4, 0.2, 0.9);
my @light_diffuse = (1.0, 1.0, 1.0, 1.0);
my @light_ambient = (0.15, 0.15, 0.15, 0.15);
my @light_specular = (1.0, 1.0, 1.0, 1.0);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowPosition(0,0);
glutInitWindowSize(500,500);
glutCreateWindow("Âðàùàþùèéñÿ êóáèê!");
init();
glutDisplayFunc(\&display);
glutReshapeFunc(\&reshape);
glutIdleFunc(\&spinDisplay);
glutMainLoop();

sub init {
  glClearColor(1.0, 1.0, 1.0, 1.0);
  glShadeModel(GL_SMOOTH);
  glEnable(GL_DEPTH_TEST);
  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT0);
}

sub display {
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLightfv_p(GL_LIGHT0, GL_POSITION, @light0_position);
  glLightfv_p(GL_LIGHT0, GL_DIFFUSE, @light_diffuse);
  glLightfv_p(GL_LIGHT0, GL_AMBIENT, @light_ambient);
  glLightfv_p(GL_LIGHT0, GL_SPECULAR, @light_specular);
  glMaterialfv_p(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, @mat_amb_diff_color);
  glLoadIdentity();
  gluLookAt(2.0, 2.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
  glPushMatrix();
  glScalef(2.0, 2.0, 2.0);
  glRotatef($spin, $vpin, $spin, $vpin);
  glutSolidCube(2.0);
  glPopMatrix();
  glutSwapBuffers();
}

sub spinDisplay {
  $spin += 0.1;
  $vpin += 0.1;
  $spin = $spin - 360.0 if ($spin > 360.0);
  $vpin = $vpin - 360.0 if ($vpin > 360.0);
  glutPostRedisplay();
}

sub reshape {
  my ($w, $h) = @_;
  glViewport(0, 0, $w, $h);
  glMatrixMode (GL_PROJECTION);
  glLoadIdentity ();
  gluPerspective(45.0, $h ? $w/$h : 0, 1.0, 20.0);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
}



--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
frenkys
Дата 3.2.2006, 02:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 18.6.2005

Репутация: 1
Всего: 1



извини что не ответил,инета небыло,........ а можно ли получиться скриншотик кубика перлом на сервере чтобі не создавались окошки?
--------------------
 niva[frenky]
PM MAIL WWW   Вверх
frenkys
Дата 27.11.2007, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 18.6.2005

Репутация: 1
Всего: 1



Вобщем очень хочеться не создавая окошка получить скриншот того чтополучилось хотяб ы первого кадра.

Например для тогоже куба или чайника

вот есть модуль:

http://search.cpan.org/~bfree/OpenGL-Image...Image/Common.pm


но у меня не получеться :( пишет что метод для сохранения не известен.
--------------------
 niva[frenky]
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0781 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.