專題製作進度
製作出背景
人物
2018年1月27日 星期六
2018年1月14日 星期日
計圖筆記WEEK16
專題進度:
做出一大一小球會一分為二
float r1=200, r2=0;
float totalArea=r1*r1;
boolean touched=false;
int animT=0;
void setup(){
size(800,600);
}
void draw(){
background(255);
if(touched) fill(255,255,0);
else fill(255);
ellipse(300,300, r1,r1);
ellipse( 600,300, r2, r2);
if(touched && animT>0){
//same total area
float diff=(totalArea/3) / 60 * (60-animT);
r2=sqrt(diff);
r1=sqrt(totalArea-diff);
animT--;
}
}
void mousePressed(){
if( dist( mouseX, mouseY, 300,300 ) < r1/2 ){
touched=true;
animT=60;
}
}
做出一大一小球會一分為二
float r1=200, r2=0;
float totalArea=r1*r1;
boolean touched=false;
int animT=0;
void setup(){
size(800,600);
}
void draw(){
background(255);
if(touched) fill(255,255,0);
else fill(255);
ellipse(300,300, r1,r1);
ellipse( 600,300, r2, r2);
if(touched && animT>0){
//same total area
float diff=(totalArea/3) / 60 * (60-animT);
r2=sqrt(diff);
r1=sqrt(totalArea-diff);
animT--;
}
}
void mousePressed(){
if( dist( mouseX, mouseY, 300,300 ) < r1/2 ){
touched=true;
animT=60;
}
}
2018年1月13日 星期六
圖學筆記乄Week16
期末專題製作:
進度:
匯入模型,設計室內空間。
難題:
模型顏色?環境顏色改變。
解決:
貼圖影響顏色部分:因為貼圖完,OpenGL會依照最後一個顏色再繼續畫下去,所以影響其他部分。
=>
方法: 沒有貼圖的部分,glDisable(GL_TEXTURE_2D); 使用此程式碼關閉貼圖,
在要貼圖地方glEnable(GL_TEXTURE_2D); 使用此語法。
圖示:
有glDisable(GL_TEXTURE_2D);
沒有:
地面受影響。
Weiting的計圖第十六週
期末專題準備:
嘗試用p語言和glut製作專題
p語言:
製作出了一個3D間和一顆球(Sphere)並且讓他可以在空間中自由移動
glut:
運用2D座標系統製作了一個假3D場景
搜尋房間設備且規劃版面配置
2018年1月12日 星期五
Claire's Note #16
WEEK16
Topic:
- 期末作品Q&A
A. 期末專題
已具備基礎功能及部分附加功能:
主頁面:鍵盤控制旋轉、轉換視角
介面:計時、開新遊戲鍵、暫停鍵
目標:
1. 警告視窗:遊戲進行中按下 [NEW GAME] 時,跳出確認視窗確定是否再開新的一局
2. 改以滑鼠控制旋轉
STEP 1: 多視窗
問題:關閉小視窗時,原本的主視窗也會被關閉
解決方法:改以MessageBox顯示
MessageBox(NULL, "是否開啟新局?", "", MB_YESNO);
回傳值:按鈕ID
是:IDYES,否:IDNO
STEP 2: 滑鼠控制
問題:如何在滑鼠點擊頁面時,取得投影至該點的物件
參考範例程式碼:Selection()
詠銓_Week16_Note
Class: 專題製作
1.承上進度:
a.上次以完成了砲管以及球串軌道的製作
b.這次一開始先用Timer定速,讓軌道速度能一致。
c.接著寫mouse函式,使得在點擊左鍵時能將砲管中的球發射。
d.為了讓 c. 方便製作,將砲管也寫成物件,當中包含了發射球跟準備球。
e.接著想辦法讓發射出去的球插入球串。
2.卡關部分:
a.如何記錄發射出去的球與此球的動畫?
b.如何顯示插入球串的動畫?
3.解決問題:
a.另寫了一個freeball的結構,為一個鏈結串列,只要發射一顆球,就把該球保存到一個節點
中,解決了一次多顆球在畫面上的問題,也方便動畫呈現。
b.準備了碰撞偵測函式、判斷插入方向函式、插入位置設定函式等來輔助freeball插入ballist
的動作。
1.承上進度:
a.上次以完成了砲管以及球串軌道的製作
b.這次一開始先用Timer定速,讓軌道速度能一致。
c.接著寫mouse函式,使得在點擊左鍵時能將砲管中的球發射。
d.為了讓 c. 方便製作,將砲管也寫成物件,當中包含了發射球跟準備球。
e.接著想辦法讓發射出去的球插入球串。
2.卡關部分:
a.如何記錄發射出去的球與此球的動畫?
b.如何顯示插入球串的動畫?
3.解決問題:
a.另寫了一個freeball的結構,為一個鏈結串列,只要發射一顆球,就把該球保存到一個節點
中,解決了一次多顆球在畫面上的問題,也方便動畫呈現。
b.準備了碰撞偵測函式、判斷插入方向函式、插入位置設定函式等來輔助freeball插入ballist
的動作。
Claire 的課堂作業 week16
計算機圖學 Computer Graphics
- 主題:期末作品 Q & A
今天的進度完全都是期末作品的Q&A,而且終於輪到我了 ya
在問老師問題前,我已經完成俄羅斯方塊的背景、隨機形狀和顏色,並且可以左右移動
遇到最大的問題就是方塊該怎的掉下來?以及在OpenGL下怎麼實作碰撞偵測?
我選擇問老師碰撞偵測的問題
而老師則用Processing來示範,程式碼如下,加了一些筆記註解
回家後改一改程式,就變成了下面的樣子(完成下方的偵測 xD)
原來我一開始寫的時候沒有考慮到後面開發的操作方便性
直接把圖形畫在視窗上的座標轉成浮點數,沒有善用到背景的array
後來將陣列和螢幕上的位置重新配置(換一種寫法)就順利多了
2018年1月11日 星期四
羅浩倫的學習筆記 Week16
本週沒有上課
專題進度
上週請教過老師之後決定使用opencv來做背景的貼圖,程式碼:
#ifndef BACKGROUND_H_INCLUDED
#define BACKGROUND_H_INCLUDED
#include "freeglut.h"
int myTexture(char *filename);
void displayBackground(GLUquadric *quad, GLuint &BGid);
#endif // BACKGROUND_H_INCLUDED
大致上是利用老師在week8的時候教的"如何在球體上貼圖(地球)"所寫的程式碼改編而成的,不過在跟我自己的程式碼組合在一起的時候還是花了不少時間,不過還好我(自認)寫程式的習慣還不錯,把不同的功能的程式碼組合起來並不需要太多步驟,整體來說算是順利的完成背景了。
目前我有想到可以在一顆球體上直接貼一張背景圖,讓MMD模型直接在球體中間跳舞,因為如果只是在背景貼一張圖的話,旋轉視角之後就會顯得很突兀,下週就是最後一週了,希望可以順利完成我的期末作品。
40147027S-Week16
期末作品 製作:
- selection 使用 (openGL)
- message box (openGL)
- 聲道控制 (Processing)
- 遊戲軌道製作 (Processing)
- 水波紋分享 http://madebyevan.com/webgl-water/
PS:與我的主題操作相似
2017年12月30日 星期六
吳映廷 計算機圖學 week16
本週的主題是製作期末作品。
這次開始使用Unity,把主角和基本的game manager 弄好了。
以下是基本的game manager程式碼。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class GM : MonoBehaviour
{
public static GM instance;
void Awake()
{
{
if (instance == null)
instance = this;
else if (instance != this)
Destroy(gameObject);
}
Application.targetFrameRate = 60;
}
void Update()
{
//每frame會自動呼叫一次的函式
}
}
以下是主角的程式碼。
public class stick_man : MonoBehaviour
{
public bool isAttack = false;
public bool isAttack_R = false;
public float attackTime = 0,attackTime_R = 0;
private bool isDead = false;
private Animator anim;
private Rigidbody2D rb2d;
void Start()
{
anim = GetComponent<Animator>();
rb2d = GetComponent<Rigidbody2D>();
}
void Update()
{
if (isDead == false)
{
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
Vector3 theScale = transform.localScale;
theScale.x = Math.Abs(theScale.x);
transform.localScale = theScale;
System.Random rnd = new System.Random();
var attackType = rnd.Next(0, 3);
isAttack = true;
switch (attackType)
{
case 0:
anim.SetTrigger("punch");
break;
case 1:
anim.SetTrigger("elbow");
break;
case 2:
anim.SetTrigger("kick");
break;
}
}
if (Input.GetKeyDown(KeyCode.RightArrow))
{
Vector3 theScale = transform.localScale;
theScale.x = -Math.Abs(theScale.x);
transform.localScale = theScale;
System.Random rnd = new System.Random();
var attackType = rnd.Next(0, 3);
isAttack_R = true;
switch (attackType)
{
case 0:
anim.SetTrigger("punch");
break;
case 1:
anim.SetTrigger("elbow");
break;
case 2:
anim.SetTrigger("kick");
break;
}
}
if (attackTime >= 1.5)
{
isAttack = false;
attackTime = 0;
}
if (attackTime_R >= 1.5)
{
isAttack_R = false;
attackTime_R = 0;
}
attackTime += Time.deltaTime;
attackTime_R += Time.deltaTime;
}
if (isDead == true)
{
Destroy(this.gameObject);
}
}
}
這次開始使用Unity,把主角和基本的game manager 弄好了。
以下是基本的game manager程式碼。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class GM : MonoBehaviour
{
public static GM instance;
void Awake()
{
{
if (instance == null)
instance = this;
else if (instance != this)
Destroy(gameObject);
}
Application.targetFrameRate = 60;
}
void Update()
{
//每frame會自動呼叫一次的函式
}
}
以下是主角的程式碼。
public class stick_man : MonoBehaviour
{
public bool isAttack = false;
public bool isAttack_R = false;
public float attackTime = 0,attackTime_R = 0;
private bool isDead = false;
private Animator anim;
private Rigidbody2D rb2d;
void Start()
{
anim = GetComponent<Animator>();
rb2d = GetComponent<Rigidbody2D>();
}
void Update()
{
if (isDead == false)
{
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
Vector3 theScale = transform.localScale;
theScale.x = Math.Abs(theScale.x);
transform.localScale = theScale;
System.Random rnd = new System.Random();
var attackType = rnd.Next(0, 3);
isAttack = true;
switch (attackType)
{
case 0:
anim.SetTrigger("punch");
break;
case 1:
anim.SetTrigger("elbow");
break;
case 2:
anim.SetTrigger("kick");
break;
}
}
if (Input.GetKeyDown(KeyCode.RightArrow))
{
Vector3 theScale = transform.localScale;
theScale.x = -Math.Abs(theScale.x);
transform.localScale = theScale;
System.Random rnd = new System.Random();
var attackType = rnd.Next(0, 3);
isAttack_R = true;
switch (attackType)
{
case 0:
anim.SetTrigger("punch");
break;
case 1:
anim.SetTrigger("elbow");
break;
case 2:
anim.SetTrigger("kick");
break;
}
}
if (attackTime >= 1.5)
{
isAttack = false;
attackTime = 0;
}
if (attackTime_R >= 1.5)
{
isAttack_R = false;
attackTime_R = 0;
}
attackTime += Time.deltaTime;
attackTime_R += Time.deltaTime;
}
if (isDead == true)
{
Destroy(this.gameObject);
}
}
}
2017年12月28日 星期四
Hello World_OpenGL_note_Week16
week 16
本周進度:
進入期末作品的設計。
尋找靈感。參考: http://madebyevan.com/webgl-water/
網頁中介紹詳細的水波紋設計,可以試著簡化來做。
訂閱:
文章 (Atom)








