вторник, 14 октября 2014 г.

shellGL v1.0





Пример работы первой версии ShellGL:


download ShellGL v1.0 14.10.2014

Содержимое архива:
  • colorTable.script - набор defin'ов для задания цветов в консоли
  • shellGl.script - функции для работы с 3d графикой
  • pictures - папака с текстурами
  • index.script - shell скрипт демонстрирующий возможности shellGL
Подробнее рассмотрим как в index.script осуществляется вывод вращающегося куба:

#!/bin/bash




#подключение библиотеки shellGL
source shellGL.script


linesCount=72 #количество элементов в массиве координат = количество вершин * 3
#счётчик задающий угол поворота
timer=0
#главный игровой цикл
while [ true ]
do
    #координаты вершин, каждые 3 штуки задают вершину, каждая строка задаёт линию
    plain=(
     0  0  0  0  0 40
     0  0 40 40  0 40
    40  0 40 40  0  0
    40  0  0  0  0  0

     0  20  0  0  20 40
     0  20 40 40  20 40
    40  20 40 40  20  0
    40  20  0  0  20  0

     0  0  0  0  20 0
     0  0 40  0  20 40
    40  0 40 40  20 40
    40  0  0 40  20  0
    )
    #увеличиваем значение счётчика угла на pi/25 градусов
    timer=$(echo "$timer + $pi/25" | bc -l)
    if [ $(awk 'BEGIN{printf "%.0f\n","'$timer'"}') -gt 10 ]; then
        timer=0 #сбрасываем значение таймера
    fi
        #задаём значение матрицы перемещения
        #смещение будет происходить на -20 единиц по x, 0 по y и -20 по z
        #это смещение делается, чтобы центр куба совпал с началом координат
        translateMat=$(translateMatrix -20 0 -20)
        #обойти все вершины
        for ((i=0; i<linesCount; i+=3))
        do
                #записать тройку обрабатываемых вершин в вектор
                tempVec=( ${plain[$(($i+0))]} ${plain[$(($i+1))]} ${plain[$(($i+2))]} )
                #применить к вектору матрицу смещение
                resTranslate=( $(mulMatrix tempVec translateMat) )
                #записать координаты вектора назад в массив вершин
                plain[$(($i+0))]=${resTranslate[0]}
                plain[$(($i+1))]=${resTranslate[1]}
                plain[$(($i+2))]=${resTranslate[2]}
        done   
    #задаётся матрица поворота на угол лежащий в переменной timer
    rotateMatY=$(rotateMatrixY $timer)
        #обойти все вершины
        for ((i=0; i<linesCount; i+=3))
        do
                #записать тройку обрабатываемых вершин в вектор
                tempVec=( ${plain[$(($i+0))]} ${plain[$(($i+1))]} ${plain[$(($i+2))]} )
        #применить к вектору матрицу поворота
        resTranslate=( $(mulMatrix tempVec rotateMatY) )
        #записать координаты вектора назад в массив вершин
                plain[$(($i+0))]=${resTranslate[0]}
                plain[$(($i+1))]=${resTranslate[1]}
                plain[$(($i+2))]=${resTranslate[2]}
        done

    #задаём значение матрицы перемещения
    #смещение будет происходить на 40 единиц по x, 10 по y и 0 по z
    translateMat=$(translateMatrix 40 10 0)
    #обойти все вершины
    for ((i=0; i<linesCount; i+=3))
        do
        #записать тройку обрабатываемых вершин в вектор
        tempVec=( ${plain[$(($i+0))]} ${plain[$(($i+1))]} ${plain[$(($i+2))]} )
               #применить к вектору матрицу смещение
               resTranslate=( $(mulMatrix tempVec translateMat) )
        #записать координаты вектора назад в массив вершин
        plain[$(($i+0))]=${resTranslate[0]}
        plain[$(($i+1))]=${resTranslate[1]}
        plain[$(($i+2))]=${resTranslate[2]}
    done
    #очистить экран
    clearScreen
    #установить цвет рисовки зелёным
    setColor ${On_IGreen}
    #обойти массив, как массив линий
    for ((i=0; i<linesCount; i+=6))
    do
        #нарисовать линию с координатами x0 y0 z0 и x1 y1 z1
        draw3DLine ${plain[$(($i+0))]} ${plain[$(($i+1))]} ${plain[$(($i+2))]} ${plain[$(($i+3))]} ${plain[$(($i+4))]} ${plain[$(($i+5))]}
    done
done

1 комментарий:

  1. The Hotel & Casino in East Village - MapYRO
    This 5-star 안동 출장마사지 hotel 과천 출장안마 and casino is located 아산 출장샵 on 포항 출장샵 the waterfront on the Potomac waterfront. Nearby hotels. 811 동해 출장샵 Casino Way, Suite 123, East Village, NY

    ОтветитьУдалить