mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-25 15:44:12 -06:00
Nicer 3D colors and lighting
This commit is contained in:
parent
bcc8e356b2
commit
a34c7c76c4
2 changed files with 49 additions and 23 deletions
|
@ -21,7 +21,7 @@ __PACKAGE__->mk_accessors( qw(quat dirty init mview_init
|
||||||
use constant TRACKBALLSIZE => 0.8;
|
use constant TRACKBALLSIZE => 0.8;
|
||||||
use constant TURNTABLE_MODE => 1;
|
use constant TURNTABLE_MODE => 1;
|
||||||
use constant SELECTED_COLOR => [0,1,0,1];
|
use constant SELECTED_COLOR => [0,1,0,1];
|
||||||
use constant COLORS => [ [1,1,1], [1,0.5,0.5], [0.5,1,0.5], [0.5,0.5,1] ];
|
use constant COLORS => [ [1,1,0], [1,0.5,0.5], [0.5,1,0.5], [0.5,0.5,1] ];
|
||||||
|
|
||||||
# make OpenGL::Array thread-safe
|
# make OpenGL::Array thread-safe
|
||||||
{
|
{
|
||||||
|
@ -342,7 +342,10 @@ sub Resize {
|
||||||
|
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
glOrtho(-$x/2, $x/2, -$y/2, $y/2, 0.5, 2 * max(@{ $self->object_bounding_box->size }));
|
glOrtho(
|
||||||
|
-$x/2, $x/2, -$y/2, $y/2,
|
||||||
|
0.5, 5 * max(@{ $self->object_bounding_box->size }),
|
||||||
|
);
|
||||||
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
unless ($self->mview_init) {
|
unless ($self->mview_init) {
|
||||||
|
@ -358,30 +361,40 @@ sub InitGL {
|
||||||
return unless $self->GetContext;
|
return unless $self->GetContext;
|
||||||
$self->init(1);
|
$self->init(1);
|
||||||
|
|
||||||
glEnable(GL_NORMALIZE);
|
glClearColor(0, 0, 0, 1);
|
||||||
glEnable(GL_LIGHTING);
|
glColor3f(1, 0, 0);
|
||||||
glDepthFunc(GL_LESS);
|
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
glClearDepth(1.0);
|
||||||
|
glDepthFunc(GL_LEQUAL);
|
||||||
|
glEnable(GL_CULL_FACE);
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
# Settings for our light.
|
# ambient lighting
|
||||||
my @LightPos = (0, 0, 2, 1.0);
|
glLightModelfv_p(GL_LIGHT_MODEL_AMBIENT, 0.1, 0.1, 0.1, 1);
|
||||||
my @LightAmbient = (0.1, 0.1, 0.1, 1.0);
|
|
||||||
my @LightDiffuse = (0.7, 0.5, 0.5, 1.0);
|
glEnable(GL_LIGHTING);
|
||||||
my @LightSpecular = (0.1, 0.1, 0.1, 0.1);
|
glEnable(GL_LIGHT0);
|
||||||
|
glEnable(GL_LIGHT1);
|
||||||
|
glLightfv_p(GL_LIGHT0, GL_POSITION, 0.5, 0.5, 1, 0);
|
||||||
|
glLightfv_p(GL_LIGHT0, GL_SPECULAR, 0.5, 0.5, 0.5, 1);
|
||||||
|
glLightfv_p(GL_LIGHT0, GL_DIFFUSE, 0.8, 0.8, 0.8, 1);
|
||||||
|
glLightfv_p(GL_LIGHT1, GL_POSITION, 1, 0, 0.5, 0);
|
||||||
|
glLightfv_p(GL_LIGHT1, GL_SPECULAR, 0.5, 0.5, 0.5, 1);
|
||||||
|
glLightfv_p(GL_LIGHT1, GL_DIFFUSE, 1, 1, 1, 1);
|
||||||
|
|
||||||
# Enables Smooth Color Shading; try GL_FLAT for (lack of) fun.
|
# Enables Smooth Color Shading; try GL_FLAT for (lack of) fun.
|
||||||
glShadeModel(GL_SMOOTH);
|
glShadeModel(GL_SMOOTH);
|
||||||
|
|
||||||
# Set up a light, turn it on.
|
glMaterialfv_p(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, 0.5, 0.3, 0.3, 1);
|
||||||
glLightfv_p(GL_LIGHT1, GL_POSITION, @LightPos);
|
glMaterialfv_p(GL_FRONT_AND_BACK, GL_SPECULAR, 1, 1, 1, 1);
|
||||||
glLightfv_p(GL_LIGHT1, GL_AMBIENT, @LightAmbient);
|
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 50);
|
||||||
glLightfv_p(GL_LIGHT1, GL_DIFFUSE, @LightDiffuse);
|
glMaterialfv_p(GL_FRONT_AND_BACK, GL_EMISSION, 0.1, 0, 0, 0.9);
|
||||||
glLightfv_p(GL_LIGHT1, GL_SPECULAR, @LightSpecular);
|
|
||||||
glEnable(GL_LIGHT1);
|
|
||||||
|
|
||||||
# A handy trick -- have surface material mirror the color.
|
# A handy trick -- have surface material mirror the color.
|
||||||
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
|
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
|
||||||
glEnable(GL_COLOR_MATERIAL);
|
glEnable(GL_COLOR_MATERIAL);
|
||||||
|
glEnable(GL_MULTISAMPLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub Render {
|
sub Render {
|
||||||
|
@ -392,7 +405,10 @@ sub Render {
|
||||||
return unless my $context = $self->GetContext;
|
return unless my $context = $self->GetContext;
|
||||||
$self->SetCurrent($context);
|
$self->SetCurrent($context);
|
||||||
$self->InitGL;
|
$self->InitGL;
|
||||||
|
|
||||||
|
glClearColor(1, 1, 1, 1);
|
||||||
|
glClearDepth(1);
|
||||||
|
glDepthFunc(GL_LESS);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
|
@ -409,6 +425,8 @@ sub Render {
|
||||||
|
|
||||||
$self->draw_mesh;
|
$self->draw_mesh;
|
||||||
|
|
||||||
|
glDisable(GL_LIGHTING);
|
||||||
|
|
||||||
my $z0 = 0;
|
my $z0 = 0;
|
||||||
# draw axes
|
# draw axes
|
||||||
{
|
{
|
||||||
|
@ -433,20 +451,23 @@ sub Render {
|
||||||
my $ground_z = $z0-0.02;
|
my $ground_z = $z0-0.02;
|
||||||
glDisable(GL_CULL_FACE);
|
glDisable(GL_CULL_FACE);
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
glBegin(GL_QUADS);
|
glBegin(GL_QUADS);
|
||||||
glColor4f(1, 1, 1, 0.5);
|
glColor4f(0.5, 0.5, 0.5, 0.3);
|
||||||
|
glNormal3d(0,0,1);
|
||||||
glVertex3f(-$axis_len, -$axis_len, $ground_z);
|
glVertex3f(-$axis_len, -$axis_len, $ground_z);
|
||||||
glVertex3f($axis_len, -$axis_len, $ground_z);
|
glVertex3f($axis_len, -$axis_len, $ground_z);
|
||||||
glVertex3f($axis_len, $axis_len, $ground_z);
|
glVertex3f($axis_len, $axis_len, $ground_z);
|
||||||
glVertex3f(-$axis_len, $axis_len, $ground_z);
|
glVertex3f(-$axis_len, $axis_len, $ground_z);
|
||||||
glEnd();
|
glEnd();
|
||||||
glEnable(GL_CULL_FACE);
|
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
|
glEnable(GL_CULL_FACE);
|
||||||
|
|
||||||
# draw grid
|
# draw grid
|
||||||
|
glLineWidth(3);
|
||||||
|
glColor3f(1.0, 1.0, 1.0);
|
||||||
glBegin(GL_LINES);
|
glBegin(GL_LINES);
|
||||||
glColor3f(1, 1, 1);
|
$ground_z += 0.02;
|
||||||
for (my $x = -$axis_len; $x <= $axis_len; $x += 10) {
|
for (my $x = -$axis_len; $x <= $axis_len; $x += 10) {
|
||||||
glVertex3f($x, -$axis_len, $ground_z);
|
glVertex3f($x, -$axis_len, $ground_z);
|
||||||
glVertex3f($x, $axis_len, $ground_z);
|
glVertex3f($x, $axis_len, $ground_z);
|
||||||
|
@ -464,7 +485,7 @@ sub Render {
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
glBegin(GL_QUADS);
|
glBegin(GL_QUADS);
|
||||||
glColor4f(1, 0.8, 0.8, 0.5);
|
glColor4f(0.8, 0.8, 0.8, 0.5);
|
||||||
glVertex3f(-$axis_len, -$axis_len, $plane_z);
|
glVertex3f(-$axis_len, -$axis_len, $plane_z);
|
||||||
glVertex3f($axis_len, -$axis_len, $plane_z);
|
glVertex3f($axis_len, -$axis_len, $plane_z);
|
||||||
glVertex3f($axis_len, $axis_len, $plane_z);
|
glVertex3f($axis_len, $axis_len, $plane_z);
|
||||||
|
@ -474,6 +495,8 @@ sub Render {
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glEnable(GL_LIGHTING);
|
||||||
|
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
glFlush();
|
glFlush();
|
||||||
|
|
|
@ -27,6 +27,9 @@ my %opt = ();
|
||||||
{
|
{
|
||||||
my $model = Slic3r::Model->read_from_file($ARGV[0]);
|
my $model = Slic3r::Model->read_from_file($ARGV[0]);
|
||||||
|
|
||||||
|
# make sure all objects have at least one defined instance
|
||||||
|
$model->add_default_instances;
|
||||||
|
|
||||||
$Slic3r::ViewMesh::object = $model->objects->[0];
|
$Slic3r::ViewMesh::object = $model->objects->[0];
|
||||||
my $app = Slic3r::ViewMesh->new;
|
my $app = Slic3r::ViewMesh->new;
|
||||||
$app->MainLoop;
|
$app->MainLoop;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue