출처

[DirectX 3D] - Lighting (1) <Ambient, Diffuse, Specular, Emissive> (tistory.com)

 

[DirectX 3D] - Lighting (1) <Ambient, Diffuse, Specular, Emissive>

Forward Lighting : 즉시 Mesh에 그리는 방식 Deferred Lighting : 한 번에 모아서 그리는 방식 원래의 조명은 들어와서 반사되어 생기는 것인데 게임은 자기가 발산하는것이다. // 자신의 색이 노란색이면

hombody.tistory.com

Ambient, Diffuse, Specular and Emissive lighting | bassemtodary (wordpress.com)

 

Ambient, Diffuse, Specular and Emissive lighting

The Light Model covers ambient, diffuse, specular, and emissive lighting. This is enough flexibility to solve a wide range of lighting situations. You refer to the total amount of light in a scene …

bassemtodary.wordpress.com

 

 

Ambient : 일정한 빛. 어두운 곳 등 광원 상관 없이 나오는 색 주변 환경에 반사된 빛이 다시 영향을 주는 정도 표현

Diffuse : 빛과 물체 법선에 의해 결정되는 색으로 물체에 그림자를 지우고 입체감 형성

Specular : 빛이 반사되어 카메라에 직접 들어올때 보이는 빛(색). Diffuse보다 강하고, 오브젝 표면에 급격하게 떨어짐. 물체 디테일을 더해줌

Emission : 전구 등 발광 물체에서 방출되는 빛

 

 

'작업물(Works) > ComputerGraphics' 카테고리의 다른 글

[OpenGL]Paint Program  (0) 2016.07.11
[OpenGL]Mouse Callback Function  (0) 2016.07.08
[OpenGL]First OpenGL Project  (0) 2016.07.08
[OpenGL]First Step to Computer Graphics  (0) 2016.07.08

http://www.alanzucconi.com/2015/06/10/a-gentle-introduction-to-shaders-in-unity3d/


인디 개발자의 유니티 셰이더에 대한 튜토리얼.


챕터 1과 2는 흑기사의 방랑일지 블로그(http://jinhomang.tistory.com/135)에 있고


3부터는 없는 것 같아 우선 개인적으로 필요한 챕터4를 작성합니당..


다수의 오역과 의역이 예상됩니다






Finished!


 

This was my final project



I changed to make thighs with another sphere objects



'작업물(Works) > Unity' 카테고리의 다른 글

셰이더 입문 튜토리얼 챕터4 번역  (0) 2017.07.21
Unity3D EcoSystem AI - FOOD CHAIN  (0) 2016.12.03

Yellow - Eagle : Eat Birds, Fastest, will starve when life time is over
Red - Bird: Eat flies, Secondly fastest, will starve when life time is over
Green - Fly: Slowest, will products every 10 seconds

I made this project for assignment for my Computer Graphics course. This is a program like a 'Paint'. I can draw line, points, polygons as clicking points on the window. And also, I can change the color of them(RGB + Alpha) and size of lines(or points)



This is how my program looks like. On the top there are UI buttons. User clicks the button to change the color, size, type of drawing etc.






 Each drawings are saved with struct 'Polygon' which have points(Pts), color information(as a array), type of drawing(will be lines, points, or polygon etc). Variable 'ptsize' means when its' type is points, the size of point. Similary, variable 'linesize' means when its' type is line(line, lineloop, polygon, linestrip), the size of lines.



And here is settings of the world and 'main' function of the C++ project.



This is first part of display callback function 'Render' Here, I activated blending mode and initialized color. And with 'for' loop, I draw all members of a array 'PolyList' using switch sentence following each member's type.



This is second part of 'Render' function, which draw preview of current drawing. So 'Render' function which consists of 2 part is similar with previous project that I posted just before in same category(see this: http://busterworld.tistory.com/12)

So here in the second part, if user is clicked 1st point, program draws a preview of object with points that Polygon struct already have and current mouse position. Then, I drew UI on the top with 'drawPalette()' function.





This is mouse callback function, which will be called when user click with mouse. If button clicked is left button, the point information will be saved in temporary point struct variable. Then, if position of the point is in one of the buttons on top UI, proper variables will be changed following which button is clicked.



And when user didn't clicked any button on UI, the point will be added in temporary Polygon struct 'TmpPolygon'. This will be used when Render function draw preview.




This is end of mouse function. When user clicked right button of mouse, this means user finished drawing one object. So temporary polygon will be added in the PolyList and TmpPolygon will be initialized. And I printed current alpha value as window title.



This is MouseMotion function, which is called when user move mouse cursor. This will save current position of mouse in realtimePt Point struct variable.



For UI, I draw several quads as buttons. This is the code


void drawPalette()
{
 glLineWidth(1);
 //Draw UI
 glColor3f(1, 1, 1);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 0 * 20, ymax - 20, 1);
 glVertex3f(xmin + 40 * 20, ymax - 20, 1);
 glVertex3f(xmin + 40 * 20, ymax, 1);
 glVertex3f(xmin + 0 * 20, ymax, 1);
 //Red Palette
 glColor3f(1, 0, 0);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 0 * 20, ymax - 20, 1);
 glVertex3f(xmin + 1 * 20, ymax - 20, 1);
 glVertex3f(xmin + 1 * 20, ymax, 1);
 glVertex3f(xmin + 0 * 20, ymax, 1);
 glEnd();

 //Green  Palette
 glColor3f(0, 1, 0);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 1 * 20, ymax - 20, 1);
 glVertex3f(xmin + 2 * 20, ymax - 20, 1);
 glVertex3f(xmin + 2 * 20, ymax, 1);
 glVertex3f(xmin + 1 * 20, ymax, 1);
 glEnd();

 //Blue  Palette
 glColor3f(0, 0, 1);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 2 * 20, ymax - 20, 1);
 glVertex3f(xmin + 3 * 20, ymax - 20, 1);
 glVertex3f(xmin + 3 * 20, ymax, 1);
 glVertex3f(xmin + 2 * 20, ymax, 1);
 glEnd();

 //Yellow  Palette
 glColor3f(1, 1, 0);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 3 * 20, ymax - 20, 1);
 glVertex3f(xmin + 4 * 20, ymax - 20, 1);
 glVertex3f(xmin + 4 * 20, ymax, 1);
 glVertex3f(xmin + 3 * 20, ymax, 1);
 glEnd();

 //Violet  Palette
 glColor3f(1, 0, 1);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 4 * 20, ymax - 20, 1);
 glVertex3f(xmin + 5 * 20, ymax - 20, 1);
 glVertex3f(xmin + 5 * 20, ymax, 1);
 glVertex3f(xmin + 4 * 20, ymax, 1);
 glEnd();

 //Skyblue  Palette
 glColor3f(0, 1, 1);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 5 * 20, ymax - 20, 1);
 glVertex3f(xmin + 6 * 20, ymax - 20, 1);
 glVertex3f(xmin + 6 * 20, ymax, 1);
 glVertex3f(xmin + 5 * 20, ymax, 1);
 glEnd();

 //White  Palette
 glColor3f(1, 1, 1);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 6 * 20, ymax - 20, 1);
 glVertex3f(xmin + 7 * 20, ymax - 20, 1);
 glVertex3f(xmin + 7 * 20, ymax, 1);
 glVertex3f(xmin + 6 * 20, ymax, 1);
 glEnd();

 //Black  Palette
 glColor3f(0, 0, 0);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 7 * 20, ymax - 20, 1);
 glVertex3f(xmin + 8 * 20, ymax - 20, 1);
 glVertex3f(xmin + 8 * 20, ymax, 1);
 glVertex3f(xmin + 7 * 20, ymax, 1);
 glEnd();

 //Alpha Up
 glColor3f(1, 1, 1);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 8 * 20, ymax - 20, 1);
 glVertex3f(xmin + 9 * 20, ymax - 20, 1);
 glVertex3f(xmin + 9 * 20, ymax, 1);
 glVertex3f(xmin + 8 * 20, ymax, 1);
 glEnd();
 
 glColor3f(0, 0, 0);
 glBegin(GL_LINES);
 glVertex3f(xmin + 9 * 20, ymax - 20, 1);
 glVertex3f(xmin + 9 * 20, ymax, 1);
 glVertex3f(xmin + 8.25 * 20, ymax - 12, 1);
 glVertex3f(xmin + 8.5 * 20, ymax - 8, 1);
 glVertex3f(xmin + 8.5 * 20, ymax - 8, 1);
 glVertex3f(xmin + 8.75 * 20, ymax - 12, 1);
 glEnd();

 //Alpha Down
 glColor3f(1, 1, 1);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 9 * 20, ymax - 20, 1);
 glVertex3f(xmin + 10 * 20, ymax - 20, 1);
 glVertex3f(xmin + 10 * 20, ymax, 1);
 glVertex3f(xmin + 9 * 20, ymax, 1);
 glEnd();

 glColor3f(0, 0, 0);
 glBegin(GL_LINES);
 glVertex3f(xmin + 10 * 20, ymax - 20, 1);
 glVertex3f(xmin + 10 * 20, ymax, 1); 
 glVertex3f(xmin + 9.25 * 20, ymax - 8, 1);
 glVertex3f(xmin + 9.5 * 20, ymax - 12, 1);
 glVertex3f(xmin + 9.5 * 20, ymax - 12, 1);
 glVertex3f(xmin + 9.75 * 20, ymax - 8, 1);
 glEnd();

 //Draw Circle
 glColor3f(1, 1, 1);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 10 * 20, ymax - 20, 1);
 glVertex3f(xmin + 11 * 20, ymax - 20, 1);
 glVertex3f(xmin + 11 * 20, ymax, 1);
 glVertex3f(xmin + 10 * 20, ymax, 1);
 glEnd();
 glColor3f(0, 0, 0);
 drawCircle(xmin + 10.5 * 20, ymax - 10, 5);

 //Draw Polygon
 glColor3f(1, 1, 1);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 11 * 20, ymax - 20, 1);
 glVertex3f(xmin + 12 * 20, ymax - 20, 1);
 glVertex3f(xmin + 12 * 20, ymax, 1);
 glVertex3f(xmin + 11 * 20, ymax, 1);
 glEnd();
 glColor3f(0, 0, 0);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 11.25 * 20, ymax - 15, 1);
 glVertex3f(xmin + 11.75 * 20, ymax - 15, 1);
 glVertex3f(xmin + 11.75 * 20, ymax - 5, 1);
 glVertex3f(xmin + 11.25 * 20, ymax - 5, 1);
 glEnd();

 //Draw Line Loop
 glColor3f(1, 1, 1);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 12 * 20, ymax - 20, 1);
 glVertex3f(xmin + 13 * 20, ymax - 20, 1);
 glVertex3f(xmin + 13 * 20, ymax, 1);
 glVertex3f(xmin + 12 * 20, ymax, 1);
 glEnd();
 glColor3f(0, 0, 0);
 glBegin(GL_LINE_LOOP);
 glVertex3f(xmin + 12.25 * 20, ymax - 15, 1);
 glVertex3f(xmin + 12.75 * 20, ymax - 15, 1);
 glVertex3f(xmin + 12.75 * 20, ymax - 5, 1);
 glVertex3f(xmin + 12.25 * 20, ymax - 5, 1);
 glEnd();

 //Draw Line Strip
 glColor3f(1, 1, 1);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 13 * 20, ymax - 20, 1);
 glVertex3f(xmin + 14 * 20, ymax - 20, 1);
 glVertex3f(xmin + 14 * 20, ymax, 1);
 glVertex3f(xmin + 13 * 20, ymax, 1);
 glEnd();
 glColor3f(0, 0, 0);
 glBegin(GL_LINE_STRIP);
 glVertex3f(xmin + 13.75 * 20, ymax - 15, 1);
 glVertex3f(xmin + 13.25 * 20, ymax - 15, 1);
 glVertex3f(xmin + 13.75 * 20, ymax - 5, 1);
 glVertex3f(xmin + 13.25 * 20, ymax - 5, 1);
 glEnd();

 //Draw Lines
 glColor3f(1, 1, 1);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 14 * 20, ymax - 20, 1);
 glVertex3f(xmin + 15 * 20, ymax - 20, 1);
 glVertex3f(xmin + 15 * 20, ymax, 1);
 glVertex3f(xmin + 14 * 20, ymax, 1);
 glEnd();
 glColor3f(0, 0, 0);
 glLineWidth(0.5);
 glBegin(GL_LINES);
 glVertex3f(xmin + 14.25 * 20, ymax - 17, 1);
 glVertex3f(xmin + 14.75 * 20, ymax - 3, 1);
 glEnd();


 //Line size Down
 glColor3f(1, 1, 1);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 15 * 20, ymax - 20, 1);
 glVertex3f(xmin + 16 * 20, ymax - 20, 1);
 glVertex3f(xmin + 16 * 20, ymax, 1);
 glVertex3f(xmin + 15 * 20, ymax, 1);
 glEnd();
 glColor3f(0, 0, 0);
 glLineWidth(3);
 glBegin(GL_LINES);
 glVertex3f(xmin + 15.25 * 20, ymax - 10, 1);
 glVertex3f(xmin + 15.75 * 20, ymax - 10, 1);
 glEnd();

 //Line size Up
 glColor3f(1, 1, 1);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 16 * 20, ymax - 20, 1);
 glVertex3f(xmin + 17 * 20, ymax - 20, 1);
 glVertex3f(xmin + 17 * 20, ymax, 1);
 glVertex3f(xmin + 16 * 20, ymax, 1);
 glEnd();
 glColor3f(0, 0, 0);
 glLineWidth(0.5);
 glBegin(GL_LINES);
 glVertex3f(xmin + 16.25 * 20, ymax - 10, 1);
 glVertex3f(xmin + 16.75 * 20, ymax - 10, 1);
 glEnd();

 //Draw Point (size Up)
 glColor3f(1, 1, 1);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 17 * 20, ymax - 20, 1);
 glVertex3f(xmin + 18 * 20, ymax - 20, 1);
 glVertex3f(xmin + 17 * 20, ymax, 1);
 glVertex3f(xmin + 18 * 20, ymax, 1);
 glEnd();

 glColor3f(0, 0, 0);
 /*glBegin(GL_LINES);
 glVertex3f(xmin + 17 * 20, ymax - 20, 1);
 glVertex3f(xmin + 17 * 20, ymax, 1);
 glVertex3f(xmin + 16.25 * 20, ymax - 12, 1);
 glVertex3f(xmin + 16.5 * 20, ymax - 8, 1);
 glVertex3f(xmin + 16.5 * 20, ymax - 8, 1);
 glVertex3f(xmin + 16.75 * 20, ymax - 12, 1);
 glEnd();*/

 glPointSize(4.0);
 glBegin(GL_POINTS);
 glVertex3f(xmin + 17.5 * 20, ymax - 10, 1);
 glEnd();

 //Draw Point (size Down)
 glColor3f(1, 1, 1);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 18 * 20, ymax - 20, 1);
 glVertex3f(xmin + 19 * 20, ymax - 20, 1);
 glVertex3f(xmin + 19 * 20, ymax, 1);
 glVertex3f(xmin + 18 * 20, ymax, 1);
 glEnd();

 glColor3f(0, 0, 0);
 /*glBegin(GL_LINES);
 glVertex3f(xmin + 18 * 20, ymax - 20, 1);
 glVertex3f(xmin + 18 * 20, ymax, 1);
 glVertex3f(xmin + 17.25 * 20, ymax - 8, 1);
 glVertex3f(xmin + 17.5 * 20, ymax - 12, 1);
 glVertex3f(xmin + 17.5 * 20, ymax - 12, 1);
 glVertex3f(xmin + 17.75 * 20, ymax - 8, 1);
 glEnd();*/

 glPointSize(1.0);
 glBegin(GL_POINTS);
 glVertex3f(xmin + 18.5 * 20, ymax - 10, 1);
 glEnd();

 //Reset
 glColor3f(1, 1, 1);
 glBegin(GL_QUADS);
 glVertex3f(xmin + 19 * 20, ymax - 20, 1);
 glVertex3f(xmin + 20 * 20, ymax - 20, 1);
 glVertex3f(xmin + 20 * 20, ymax, 1);
 glVertex3f(xmin + 19 * 20, ymax, 1);
 glEnd();
 glColor3f(0, 0, 0);
 glBegin(GL_LINES);
 glVertex3f(xmin + 19.3 * 20, ymax - 5, 1);
 glVertex3f(xmin + 19.3 * 20, ymax - 17, 1);
 glVertex3f(xmin + 19.3 * 20, ymax - 10, 1);
 glVertex3f(xmin + 19.8 * 20, ymax - 17, 1);
 glEnd();
 glBegin(GL_LINE_LOOP);
 glVertex3f(xmin + 19.25 * 20, ymax - 5, 1);
 glVertex3f(xmin + 19.8 * 20, ymax - 5, 1);
 glVertex3f(xmin + 19.8 * 20, ymax - 10, 1);
 glVertex3f(xmin + 19.3 * 20, ymax - 10, 1);
 glEnd();
}



This is my function that draws a circle. It draws a circle which radius size is r, at (x, y)

This is final version of my project. I finished making waterwheel, and change colors of all objects. Then, I added ground and light






This is new part that connect main house and sub house on the right.




I added ground and light




 


So finally I finished it!!



I almost finished modeling on 2nd, May.








I made cubes which is light brown color, and handrails are made of cylinders (all brown and pink modelings)




This is first look of waterwheel. later, I edited on the center of it and added more components.






I made OpenGL Project that draws lines. User click two points in the window, and line is drawed with them. Also, when user click 1st point, I drew line in real time that connect 1st point and current mouse position. So, user can see the line which will be made before clicking 2nd point.


This is 'main' function of the project.




I made 'line' struct, and array of lines. line struct contains 4 integer variables that represent 2 points (x1, y1), (x2, y2) and 3 float variables that represent RGB color of the line



In display callback function 'Render()', I drew all lines in the array lines that user created before, and then if user clicked 1st point of new line(when variable draw is true), draw a line connecting that point(tmp[0], tmp[1]) and current mouse position(tmp[2], tmp[3])



In mouse callback function "MouseFunc" which means user clicked certain position for point,


when the clicked point is 1st point of the line,




set line's RGB color for random value, and variable 'draw' as true. And save the coordinate of the point in array 'tmp[0]', 'tmp[1]'.


BTW when the clicked point is 2nd point of the line,



set 'draw' variable as false and save all information about temporary line into new member of array 'lines'





And for information of mouse position in real time, I used glutPassiveMotionFunc callback function 'MouseMotion'. In this function, I set coordinates of mouse position into tmp[2], tmp[3] and call Render function. So in 'render' function, Computer will draw a line with mouse cursor after 1st point of new line is clicked.



+ Recent posts