<クラス継承の階層> ・継承を重ねすぎて動作一つ一つの意味合いがそのファイルのコード からだけでは読み取りにくくなっている気がします ↓ 特に教科書のプログラムは上位のdisplayメソッドを,そのまま使っていることも問題かもしれない. init, reshape, display などは ObjectRotate や ObjectSpinでも毎回オーバライドした方がよかったような気がする. <ObjectSpinの逆変換> ・逆変換のあたりが難しかったので、教科書に図が付いていると嬉しいかもしれない ↓ たしかに図はあった方が良いかもしれない ・displayの度に呼ばれるsetMatrix内のgluProjectでoriginを求め直している が原点を中心に常に回転しているので原点の座標は回転に対して不変なはずである ↓ ObjectSpinの範囲ではワールド座標系の原点はスクリーン座標系において移動していないが,移動する可能性はある(実際に第15章では移動する), <イベントリスナの登録 - Mouseイベント一般> ・今回イベントリスナは GLCanvas に型変換を施した drawable に登録されているが ↓ 教科書のプログラムの場合,GLCanvasクラスの継承と,GLEventListenerインタフェースの実装に なっているので,GLCanvasである this に登録してもよい. <イベントリスナの登録 - MouseWheel> ・MouseWheelListenerに与える無名クラス はMouseAdapterでよいということを教科書に書いたほうがよいのではないかと思った ↓ MouseAdapter で(new MouseAdapter() と書いて)mouseWheelMovedを定義できる(指摘されて気づいた). 私が考えていたのは,普通に implements して this を登録することだった. 参考までに,無名クラスの書き方であれば,インタフェースであっても new MouseWheelListner() としてメソッドを定義できる. <MouseWheelListenerインタフェース> ・マウスホイールに関して、MouseWheelAdapterに相当するクラスがないのは何か理由があるのでしょうか ↓ 正確なことはわからないがオーバライドすべきメソッドが1つだけだからではないだろうか.