Developing Graphics Frameworks with Python and OpenGL 1st edition by Lee Stemkoski, Michael Pascale ISBN 0367721805 Â 978-0367721800 - The ebook in PDF format with all chapters is ready for download
Developing Graphics Frameworks with Python and OpenGL 1st edition by Lee Stemkoski, Michael Pascale ISBN 0367721805 Â 978-0367721800 - The ebook in PDF format with all chapters is ready for download
com
https://ebookball.com/product/developing-graphics-
frameworks-with-python-and-opengl-1st-edition-by-lee-
stemkoski-michael-pascale-
isbn-0367721805-978-0367721800-20288/
OR CLICK BUTTON
DOWLOAD EBOOK
https://ebookball.com/product/3-d-computer-graphics-mathematical-
introduction-with-opengl-1st-edition-by-medhat-rahim-19808/
ebookball.com
https://ebookball.com/product/3d-computer-graphics-a-mathematical-
introduction-with-opengl-1st-edition-by-samuel-r-buss-
isbn-0521821037-9780521821032-14672/
ebookball.com
https://ebookball.com/product/interactive-computer-graphics-a-top-
down-approach-with-shader-based-opengl-6th-edition-by-edward-angel-
dave-shreiner-isbn-0132545233-9780132545235-10844/
ebookball.com
https://ebookball.com/product/ebook-pdf-beginning-java-game-
development-libgdx-1st-edition-by-lee-
stemkoski-1484215001-9781484215005-full-chapters-22644/
ebookball.com
(Ebook PDF) Learn OpenGL ES For Mobile Game and Graphics
Development 1st edition by Prateek Mehta 1430250542
9781430250548 full chapters
https://ebookball.com/product/ebook-pdf-learn-opengl-es-for-mobile-
game-and-graphics-development-1st-edition-by-prateek-
mehta-1430250542-9781430250548-full-chapters-22624/
ebookball.com
https://ebookball.com/product/data-structures-and-algorithms-in-
python-1st-edition-by-michael-goodrich-roberto-tamassia-michael-
goldwasser-isbn-9781118476734-1118476735-15762/
ebookball.com
https://ebookball.com/product/engineering-design-and-graphics-with-
solidworks-2016-1st-edition-by-james-bethune-
isbn-013450769x-9780134507699-18212/
ebookball.com
https://ebookball.com/product/delphi-graphics-and-game-programming-
exposed-with-directx-for-versions-5-0-7-0-table-of-contents-1st-
edition-by-delphi-graphics-11194/
ebookball.com
https://ebookball.com/product/machine-learning-for-cybersecurity-
cookbook-over-80-recipes-on-how-to-implement-machine-learning-
algorithms-for-building-security-systems-using-python-1st-edition-by-
emmanuel-tsukerman-9781838556341-1/
ebookball.com
Developing Graphics
Frameworks with Python
and OpenGL
Developing Graphics
Frameworks with Python
and OpenGL
Lee Stemkoski
Michael Pascale
First edition published 2022
by CRC Press
6000 Broken Sound Parkway NW, Suite 300, Boca Raton, FL 33487-2742
Reasonable efforts have been made to publish reliable data and information, but the author and
publisher cannot assume responsibility for the validity of all materials or the consequences of
their use. The authors and publishers have attempted to trace the copyright holders of all material
reproduced in this publication and apologize to copyright holders if permission to publish in this
form has not been obtained. If any copyright material has not been acknowledged please write
and let us know so we may rectify in any future reprint.
“The Open Access version of this book, available at www.taylorfrancis.com, has been made
available under a Creative Commons Attribution-Non Commercial-No Derivatives 4.0 license”
Trademark notice: Product or corporate names may be trademarks or registered trademarks and
are used only for identification and explanation without intent to infringe.
DOI: 10.1201/9781003181378
Authors, ix
v
vi ◾ Contents
INDEX, 331
Authors
ix
CHAPTER 1
Introduction to
Computer Graphics
DOI: 10.1201/9781003181378-1 1
2 ◾ Developing Graphics Frameworks with Python and OpenGL
at full (100%) intensity. Tese three colors are typically used since photore-
ceptors in the human eye take in those particular colors. Te triple (1, 0, 0)
represents red, (0, 1, 0) represents green, and (0, 0, 1) represents blue. Black
and white are represented by (0, 0, 0) and (1, 1, 1), respectively. Additional
colors and their corresponding triples of values specifying the amounts of
red, green, and blue (ofen called RGB values) are illustrated in Figure 1.4.
Te quality of an image depends in part on its resolution (the number of
pixels in the raster) and precision (the number of bits used for each pixel).
As each bit has two possible values (0 or 1), the number of colors that can
be expressed with N-bit precision is 2 N . For example, early video game
8
consoles with 8-bit graphics were able to display 2 = 256 diferent colors.
Monochrome displays could be said to have 1-bit graphics, while modern
displays ofen feature “high color” (16-bit, 65,536 color) or “true color”
(24-bit, more than 16 million colors) graphics. Figure 1.5 illustrates the
same image rendered with high precision but diferent resolutions, while
Figure 1.6 illustrates the same image rendered with high resolution but
diferent precision levels.
In computer science, a bufer (or data bufer, or bufer memory) is a part
of a computer's memory that serves as temporary storage for data while
it is being moved from one location to another. Pixel data is stored in a
region of memory called the framebufer. A framebufer may contain mul-
tiple bufers that store diferent types of data for each pixel. At a minimum,
the framebufer must contain a color bufer, which stores RGB values.
When rendering a 3D scene, the framebufer must also contain a depth
bufer, which stores distances from points on scene objects to the virtual
camera. Depth values are used to determine whether the various points
on each object are in front of or behind other objects (from the camera’s
perspective), and thus whether they will be visiblewhen the scene is ren-
dered. If one scene object obscures another and a transparency efect is
Introduction to Computer Graphics ◾ 5
in the Xbox video game console. In general, GPUs feature a highly parallel
structure that enables them to be more efcient than CPUs for rendering
computer graphics. As computer technology advances, so does the quality
of the graphics that can be rendered; modern systems are able to produce
real-time photorealistic graphics at high resolutions.
Programs that are run by GPUs are called shaders, initially so named
because they were used for shading efects, but now used to perform many
diferent computations required in the rendering process. Just as there are
many high-level programming languages (such as Java, JavaScript, and
Python) used to develop CPU-based applications, there are many shader
programming languages. Each shader language implements an application
programming interface (API), which defnes a set of commands, functions,
and protocols that can be used to interact with an external system—in this
case, the GPU. Some APIs and their corresponding shader languages include
Tis book will focus on OpenGL, as it is the most widely adopted graphics
API. As a cross-platform library, visual results will be consistent on any
supported operating system. Furthermore, OpenGL can be used in con-
cert with a variety of high-level languages using bindings: sofware librar-
ies that bridge two programming languages, enabling functions from one
language to be used in another. For example, some bindings to OpenGL
include
Each of these stages is described in more detail in the sections that follow;
the next chapter contains code that will begin to implement many of the
processes described here.
Figure 1.9 illustrates diferent renderings of a sphere that make use of these
attributes. Additional vertex attributes may be defned as needed.
During the geometry processing stage, the vertex shader is applied to
each of the vertices; each attribute variable in the shader receives data
from a bufer according to previously specifed associations. Te pri-
mary purpose of the vertex shader is to determine the fnal position of
Introduction to Computer Graphics ◾ 11
FIGURE 1.10 One scene rendered from multiple camera locations and angles.
FIGURE 1.11 A series of cubes rendered with orthogonal projection (a) and
perspective projection (b).
1.2.3 Rasterization
Once the fnal positions of each vertex have been specifed by the vertex
shader, the rasterization stage begins. Te points themselves must frst be
grouped into the desired type of geometric primitive: points, lines, or tri-
angles, which consist of sets of 1, 2, or 3 points. In the case of lines or
triangles, additional information must be specifed. For example, consider
an array of points [A, B, C, D, E, F] to be grouped into lines. Tey could
be grouped in disjoint pairs, as in (A, B), (C, D), (E, F), resulting in a set
of disconnected line segments. Alternatively, they could be grouped in
overlapping pairs, as in (A, B), (B, C), (C, D), (D, E), (E, F), resulting in a
set of connected line segments (called a line strip). Te type of geometric
Introduction to Computer Graphics ◾ 13
each interior point is interpolated from the values at the vertices: calculated
using a weighted average, depending on the distance from the interior
point to each vertex. Te closer an interior point is to a vertex, the greater
the weight of that vertex’s value when calculating the interpolated value.
For example, if the vertices of a triangle are assigned the colors red, green,
and blue, then each pixel corresponding to the interior of the triangle will
be assigned a combination of these colors, as illustrated in Figure 1.13.
FIGURE 1.14 An image fle (a) used as a texture for a 3D object (b).
print("Hello, world!")
print("Have a nice day!")
FIGURE 1.19 Results of running the Python program from Figure 1.18.
Figure 1.19 illustrates the results of running this code, which appear in a
shell window.
To verify that these packages have been installed correctly, open a new
IDLE shell window (restart IDLE if it was open before installation). To
check Pygame, enter the following code, and press the Enter key:
import pygame
You should see a message that contains the number of the Pygame
version that has been installed, such as "pygame 1.9.6", and a greet-
ing message such as "Hello from the pygame community". If
instead you see a message that contains the text No module named
'pygame', then Pygame has not been correctly installed. Furthermore,
it will be important to install a recent version of Pygame—at least a
development version of Pygame 2.0.0. If an earlier version has been
installed, return to the command prompt and in the install command
above, change pygame to pygame==2.0.0.dev10 to install a more
recent version.
Similarly, to check the Numpy installation, instead use the code:
import numpy
In this case, if you see no message at all (just another input prompt), then
the installation was successful. If you see a message that contains the text
No module named 'numpy', then Numpy has not been correctly
installed. Finally, to check PyOpenGL, instead use the code:
import OpenGL
As was the case with testing the Numpy package, if there is no message
displayed, then the installation was successful, but a message mentioning
that the module is not installed will require you to try re-installing the
package.
If you encounter difculties installing any of these packages, there is
additional help available online:
• Pygame: https://www.pygame.org/wiki/GettingStarted
• Numpy: https://numpy.org/install/
• PyOpenGL: at http://pyopengl.sourceforge.net/documentation/
installation.html
Introduction to Computer Graphics ◾ 21
be found via the download link previously mentioned. While a free trial
version is available, if you choose to use this sofware extensively, you are
encouraged to purchase a license.
Afer installation, start the Sublime Text sofware. A new editor window
will appear, containing an empty fle. As previously mentioned, Sublime
Text can be used to run Python scripts automatically, provided that Python
has been installed for all users of your computer and it is included on the
system path. To try out this feature, in the editor window, as shown in
Figure 1.21, enter the text:
print("Hello, world!")
Next, save your fle with the name test.py; the.py extension causes
Sublime Text to recognize it as a Python script fle, and syntax highlighting
will be applied. Finally, from the menu bar, select Tools > Build or press
the keyboard key combination Ctrl + B to build and run the application.
Te output will appear in the console area, as illustrated in Figure 1.22.
Introduction to Computer Graphics ◾ 23
Introduction to
Pygame and OpenGL
I n this chapter, you will learn how to create windows with Pygame
and how to draw graphics in these windows with OpenGL. You will
start by rendering a point, followed by lines and triangles with a single
color. Ten, you will draw multiple shapes with multiple colors, create a
series of animations involving movement and color transitions, and imple-
ment interactive applications with keyboard controlled movement.
DOI: 10.1201/9781003181378-2 25
26 ◾ Developing Graphics Frameworks with Python and OpenGL
First, you will create a class called Base that initializes Pygame and
displays a window. Anticipating that the applications created will eventu-
ally feature user interaction and animation, this class will be designed to
handle the standard phases or “life cycle” of such an application:
• Startup: During this stage, objects are created, values are initialized,
and any required external fles are loaded.
• Te Main Loop: Tis stage repeats continuously (typically 60 times
per second), while the application is running and consists of the
following three substages:
• Process Input: Check if the user has performed any action that
sends data to the computer, such as pressing keys on a keyboard
or clicking buttons on a mouse.
• Update: Changing values of variables and objects.
• Render: Create graphics that are displayed on the screen.
• Shutdown: Tis stage typically begins when the user performs an
action indicating that the program should stop running (for example,
by clicking a button to quit the application). Tis stage may involve
tasks such as signaling the application to stop checking for user input
and closing any windows that were created by the application.
to create a new fle named __init __.py (note the double underscore
characters that occur before and afer init). Any code in the __init __.
py fle will be run when modules from this package are imported into
another program; leave this as an empty fle. Next, also in the core folder,
create a new fle named base.py, and enter the following code (which con-
tains some basic comments that will be explained more fully afer):
import pygame
import sys
class Base(object):
def initialize(self):
pass
def run(self):
## startup ##
self.initialize()
## main loop ##
while self.running:
## process input ##
## update ##
self.update()
## render ##
# display image on screen
pygame.display.flip()
## shutdown ##
pygame.quit()
sys.exit()
import pygame
class Input(object):
def __init__(self):
Introduction to Pygame and OpenGL ◾ 31
def update(self):
# iterate over all user input events (such as
keyboard or
# mouse)that occurred since the last time
events were checked
# for event in pygame.event.get():
# quit event occurs by clicking button to
close window
if event.type == pygame.QUIT:
self.quit = True
At present, the Input class only monitors for quit-type events; in later
sections, keyboard functionality will be added as well. For now, return to
the Base class. Afer the import statements, add the code:
Tis will enable you to use the Input class from the input module
in the core package. It should be noted that the import statements
are written assuming that your application fles (which will extend the
Base class) will be stored in the main directory (which contains all the
packages).
Next, at the end of the init function, add the code:
Tis will create and store an instance of the Input class when the Base
class is created.
Finally, in the run function, afer the comment ## process input
##, add the code:
self.input.update()
if self.input.quit:
self.running = False
Tis will enable the user to stop the application, as described prior to the
code listing for the Input class.
32 ◾ Developing Graphics Frameworks with Python and OpenGL
You will next write an application that uses these classes to create a win-
dow. Te general approach in this and similar applications will to extend
the Base class, implement the initialize and update functions, and
then, create an instance of the new class and call the run function. To
proceed, in your main folder, create a new fle named test-2-1.py with
the code:
class Test(Base):
def initialize(self):
print("Initializing program...")
def update(self):
pass
void main()
{
// code statements here
}
will be supplied from the vertex shader (interpolated during the rasteriza-
tion stage), while out indicates values will be stored in one of the various
bufers (color, depth, or stencil).
Tere are two particular out variables that are required when writ-
ing shader code for a GPU program. First, recall that the ultimate goal
of the vertex shader is to calculate the position of a point. OpenGL uses
the built-in variable gl _ Position to store this value; a value must be
assigned to this variable by the vertex shader. Second, recall that the ulti-
mate goal of the fragment shader is to calculate the color of a pixel. Early
versions of OpenGL used a built-in variable called gl _ FragColor to
store this value, and each fragment shader was required to assign a value
to this variable. Later versions require fragment shader code to explic-
itly declare an out variable for this purpose. Finally, it should be men-
tioned that both of these variables are vec4 type variables. For storing
color data, this makes sense as red, green, blue, and alpha (transparency)
values are required. For storing position data, this is less intuitive, as a
position in three-dimensional space can be specifed using only x, y, and
z coordinates. By including a fourth coordinate (commonly called w and
set to the value 1), this makes it possible for geometric transformations
(such as translation, rotation, scaling, and projection) to be represented
by and calculated using a single matrix, which will be discussed in detail
in Chapter 3.
As indicated at the beginning of this section, the current goal is to write
a vertex shader and a fragment shader that will render a single point on
the screen. Te code presented will avoid the use of bufers and exclusively
use built-in variables. (You do not need to create any new fles or enter any
code at this time.) Te vertex shader will consist of the following code:
void main()
{
gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
}
void main()
{
gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);
}
36 ◾ Developing Graphics Frameworks with Python and OpenGL
For more modern versions of OpenGL, where you need to declare a vari-
able for the output color, you can use the following code for the fragment
shader:
Taken together, the vertex shader and the fragment shader produce a
program that renders a point in the center of the screen, colored yellow. If
desired, these values can be altered within certain bounds. Te x, y, and z
components of the position vector may be changed to any value between
−1.0 and 1.0, and the point will remain visible; any values outside this range
place the point outside of the region rendered by OpenGL and will result
in an empty image being rendered. Changing the z coordinate (within this
range) will have no visible efect at this time, since no perspective trans-
formations are being applied. Similarly, the r, g, and b components of the
color vector may be changed as desired, although dark colors may be dif-
fcult to distinguish on the default black background color. It should also
be noted that the number types int and float are not interchangeable;
entering just 1 rather than 1.0 may cause shader compilation errors.
glCreateShader( shaderType )
Creates an empty shader object, which is used to store the source code of
a shader, and returns a value by which it can be referenced. Te type of
shader (such as a vertex shader or a fragment shader) is specifed with
the shaderType parameter, whose value will be an OpenGL constant
such as GL_VERTEX_SHADER or GL_FRAGMENT_SHADER.
glShaderSource( shaderRef, shaderCode )
Stores the source code in the string parameter shaderCode in the shader
object referenced by the parameter shaderRef.
glCompileShader( shaderRef )
Compiles the source code stored in the shader object referenced by the
parameter shaderRef.
Since mistakes may be made when writing shader code, compiling a shader
may or may not succeed. Unlike application compilation errors, which are
typically automatically displayed to the programmer, shader compila-
tion errors need to be checked for specifcally. Tis process is typically
handled in multiple steps: checking if compilation was successful, and if
not, retrieving the error message, and deleting the shader object to free up
memory. Tis is handled with the following functions:
glGetShaderInfoLog( shaderRef )
Returns information about the compilation process (such as errors and
warnings) from the shader referenced by the parameter shaderRef.
glDeleteShader( shaderRef )
Frees the memory used by the shader referenced by the parameter
shaderRef, and makes the reference available for future shaders that
are created.
@staticmethod
def initializeShader(shaderCode, shaderType):
if not compileSuccess:
# retrieve error message
errorMessage = glGetShaderInfoLog(shaderRef)
# free memory used to store shader program
glDeleteShader(shaderRef)
# convert byte string to character string
errorMessage = '\n' + errorMessage.
decode('utf-8')
# raise exception: halt program and print
error message
raise Exception( errorMessage )
glCreateProgram( )
Creates an empty program object, to which shader objects can be
attached, and returns a value by which it can be referenced.
glLinkProgram( programRef )
Links the vertex and fragment shaders previously attached to the pro-
gram object specifed by the parameter programRef. Among other
things, this process verifes that any variables used to send data from
the vertex shader to the fragment shader are declared in both shaders
consistently.
Another Random Document on
Scribd Without Any Related Topics
Kritikus. De már csordultig telt a pohár! Az emberi hit
elasticitásának is van mértéke! Az enyim elszakadt. Még az éneklő
hyænákat csak elviseltem, s ha a tengeri szűz elől egész Dalmatia
elszaladt, nem bánom én is elszaladok. Hanem, hogy szerző nekem
itt a XIII-ik században az Adriai-tengeren kerekes gőzhajókat
úszkáltasson végig, ez túl megy a felebaráti szeretetemen. Mesét
irunk itt vagy regényt?
Szerző. Alkudjunk meg. Én elengedem az éneklő hyænákat, a kik
a juhászbojtárokat neveiken szólították, ámbár kútforrásaim ezt
határozottan állítják, azonban már ez idő szerint ki vannak irtva
egész Dalmatiából s így azt, hogy beszéltek, s mi nyelven beszéltek,
be nem bizonyíthatnám. Időjártával az egész faj eltörpült, elgyávult,
házi állattá szelidült, hyænettának nevezték, macska gyanánt
tartották, egérfogásra, «ölbeli hyænácska!» Nagyon kedves lehetett.
Ez is kipusztult. Nem kötöm magamat hozzá. Másodsorban lemondok
az óriási tengeri szűzről. Valószinübbnek tartom, hogy a syrenek
alatt azokat a szabad gondolkodású hajadonokat értették, a kik egy
délszláv balladában meg vannak örökítve, Fiume tájékán, a kik a
hajósokat szép énekszóval hivogatják édes mulatozásra, de a
kapitány azt feleli nekik: «Most nem érünk rá, majd ha máskor vissza
jövünk!» – Hanem már a kerekes hajóimat nem engedem! Azok
csakugyan itt vannak.
Kritikus. Valami ötszáz esztendővel James Watt, a gőzerő
feltalálója előtt!
Szerző. Hiszen nem mondtam én azt, hogy gőz hajtotta a
hajókat; hanem csak azt, hogy lapátkerekek hajtották. Ezeket pedig
részletesen leirva találjuk Schulenburg velenczei admirál ritka
könyvében «Alter und neuer Staat des Königreichs Dalmatien», az
egykorú latin historikus idézeteivel, mely így hangzik: «Liburnam,
navalis idoneam bellis, quam pro magnitudine sui, virorum exercere
manibus quodummodo imbecillitas humana prohibet, quocunque
utilitas vocet, ad facilitatem cursus, ingenii ope subnixa animalium
virtus impellit. – In cujus alveo, vel capacitate, bini boves machinis
adjuncti, adhærentes rotas navis lateribus involvunt, quorum supra
ambitum, vel rotunditatem exstantes radii, currentibus hisdem rotis
in modum remarum aquam conatibus elidentes, miro quodam artis
effectu operantis, impetu parturiente discursum. Hæc eadem Liburna
pro mole sui, proque machinis in somes operantibus, tanto virium
fremitu pugnam capessit, ut omnes adversarias Liburnas, cominus
venientes facili astritu comminuat.»
Kritikus. No ha diákul van, akkor már igaznak kell neki lenni! Hát
csak tessék csengetni, hadd induljon az a steamer! Én már
fütyültem.
*
«Liburna» volt azoknak a barbar hadihajóknak a neve, a mik a
hajdani tengeri ütközetben a legnevezetesebb szerepet játszották.
Elől a vízszin alatt volt egy hosszú, hegyes sarkantyujok, mint a
kecsegének az orra, rézből, a mivel sebes rohamukban az ellenséges
hajónak a fenekét keresztül fúrták. Ez azonban csak úgy eshetett
meg, ha az a másik hajó engedte magát oldalba fogni. Mert ha az is
az orrával fordulva szemközt fogadta a megtámadóját, akkor az
összecsapásból az lett, hogy a sarkantyúk kölcsönösen elsiklottak a
hajók mellett, ellenben mind a kettőnek az evező lapátjai
összekeveredtek, egymást kölcsönösen összetörték, s akkor aztán
ökölre került a dolog, s az emberi vitézség döntötte el a csata sorsát.
A warángok kerekes liburnái egész új korszakot hoztak be a
tengeri hadverés tudományában. Épen úgy, miként a monitorok az
amerikai polgárháboru idején.
Ezek is evezőikkel hajtottak a szemközt jövő ellenségre; azonban,
a mint egy parittyavetésnyire értek hozzá, minden ember behúzta az
evezőjét s a paizsát, szekerczéjét kapta fel; mások a parittyáikhoz,
tegzeikhez nyultak, embererő nem hajtotta többé a liburnát; –
hanem «állati virtus». A hajó belsejében volt egy machina
(valószinüleg taposó malom) mind a két oldalon, azt ökrök hozták
mozgásba; a géphez a hajó oldalán két lapátos kerék volt
alkalmazva, melynek a küllői nagy robajjal csapkodták a vizet s vitték
a hajót előre. Ezek a lapátos kerekek lehetővé tették a liburnának,
hogy a legszűkebb résen is keresztül tudjon sikamlani, a hol más
hajó az evezői miatt elakad, s az által, hogy az egyik kerék
bodonjánál a taposva ügető ökörnek a lépteit gyorsították, a másikét
lohaszták, olyan gyors fordulatokra képesítik a waráng hajósok a
liburnát, a mit ellenfeleik nem birtak utánuk csinálni, s a míg azok
neki kászolódtak, a virgoncz kerekes liburna már keresztül törte a
fenekeiket, míg a waráng harczosok, parittyával, hajítódárdával már
messziről elözönlötték ellenfeleiket; nem lévén elfoglalva az
evezéssel, miként amazok.
Azért a warángok kerekes liburnái az egész Földközi-tengernek
rémei lettek. Nagy csoda, hogy a többi tengeri hatalmak, Velencze,
Genua nem birtak olyan mechanikusokkal, a kik ezt a stratagémát
utánozni tudták volna.
DÁVID KIRÁLY.
Tudniillik, hogy a waráng fejedelem kapta a keresztségben a
Dávid nevet s egyuttal a királyi czímet, ha jól tudjuk XXII-ik János
pápa alatt. Ennek a Dávid királynak a történetét fogjuk majd leirni, a
mi külömben nem zárja ki annak a lehetőségét, hogy maga az ős
igazi palæstinai Dávid király is belevonatik a condolentiába.
Épen a nagy archipelagusi kalózjáratról tértek vissza a diadalmas
hősök. Egy liburnájuk sem hiányzott, s valamennyi meg volt terhelve
zsákmánynyal. Mértföldnyi távolból a Cadmus sziklái táján hangzott a
sík hullámtól tovább adott kardaluk, a mire a magas sziklapartok
fensíkjáról viszhang gyanánt felelt a rájuk váró asszonyok üdvözlő
éneke.
Ezek nem jöttek le a férjeik elé, a hogy a morlák asszonyok
szoktak. A waráng nem tartja teherhordozó állatjának az asszonyt,
az csak az ő gyönyörűségeinek őre. A waráng asszony nem ismeri a
munkát, a férfi dolga őt eltartani, még pedig pompában és
kényelemben tartani. A waráng nő himzett öltönyben jár, a férfi
meztelenül.
A hogy a dicsőséges ember-alak az alkotó kezéből elékerűlt,
felséges meztelenségében, melynek minden tagmozdulata
dicsekedés, úgy jár-kel a világban a waráng férfi. Nem kéri kölcsön
az állatok gyapját, a növények rostját, a kukaczok selymét, se nem
fázik, se nem szégyenkezik. Mindössze egy övet visel a derekán,
bronzból, melyről hosszú, ostorforma bőrszironyok függnek alá sűrű
czafrang alakban féltérdig, s azok minden alakú bronzkarikákkal,
csigákkal, pitykékkel vannak telerakva, mikor fut, úgy cseng rajta ez
az öv, mint a czimbalom. És azonkívül még a lábszárai vannak
beborítva bőrrel, a mire már a dalmát vidék sajátszerű tövisindás
bozótjai tanították meg.
Valamennyi mind egy-egy Herakles: olyan izmokkal, a miknek az
anatomok még nevet sem adtak. Mély sebhelyeket, mint
diadalemlékeket viselnek; kinek legtöbb van, az a legnagyobb
tekintély. Némelyiknek a karjába egész lyuk van furva: ez meg a
pestis-tályognak az emléke. Mert a waráng férfi még a fekete
halálnak sem engedi át a győzelmet a teste fölött; a mint azt a
veszedelmes kelést megkapta, mely a rendes halandót megöli, fog
egy fehéren izzó vasat s kiéget vele a testéből akkora darabot, a
mekkorán a pestis tanyát ütött. Erre aztán elmegy a kedve a
halálnak a további kötekedéstől.
Sűrű hosszú hajukat a fejük tetején kontyba csavarva viselik, ez
az egyedüli fejtakarójuk; ez többnyire fekete, csak az előkelő
fejedelmi családból valóké rőt, néha egészen oroszlánpej színű.
Arczvonásaikat elzordonítá a viharos élet, az örökös napbanézés;
tekintetük kegyetlen voltát jellemzi az a néphit, hogy a warángoknak
kettős szemfényük volt, s képesek voltak a puszta ránézéssel,
huzamosb ideig, megölni valakit.
Nem is telepedik le az ő útjok járásába semmi más nemzetbeli
halandó.
Hanem azért a szerzetesek őket is felkeresik. A mióta szent
Bazilius megtérítette a warángokat a keresztyén hitre, egy bazilita
testvérnek állandóul ott kell lakni a cadmæi sziklacsoport öblében, a
kinek az a küldetése, hogy a hazatérő warángoktól majdan átvegye
a kegyes ajándékot, a mit azok a főkolostor számára hoztak. Nem
kincs az; hanem azért még is legszükségesebb minden emberre
nézve: a só. A dalmata hegyek azt nem adják, s a sófőzést
tengervízből még nem találták ki, a sót vagy aranynyal, vagy vérrel
kellett megvásárolni. Ebből adtak rendesen dézsmát a warángok a
kiküldött barátnak.
Egy barlangodu volt annak a lakása, a honnan az örök tengerre
lehetett látni. Egy nagy kőkereszt jelölte a helyet, három egymásra
helyezett faragott kőkolonczból idomítva; az alsó kolonczon még
olvasható a római irás: «Nymphis dedicatum», a legfelsőn már új
betük vannak bevésve: I. N. R. I.
Ezen a helyen valamikor a római uralom alatt valami fanum állt,
az alant csergedező forrás nympháinak tiszteletére. Nymphák és
templom nincsenek már; hanem a forrást most is tisztelik, mert az
adja az egész völgyben az iható édes vizet. Ez is egy ok, a miért a
tengerről érkezőknek ide kell sietni. Régóta ölheti már őket a szomj.
Mikor a tengerből kimeredő kopár sziklacsoportok elé érkezik a
hajóraj, az evezők megszünnek működni, s azontúl csak a
lapátkerekek hajtják a dereglyét, mely fortélyosan kanyarogva
kerülgeti a víz alatt ólálkodó szirteket s félti az oldalát a szirteken
megtörő hullámcsapástól.
A király liburnája jön legelől. Megismerhető az arany
sárkányfejről az orrán; Dávid király maga tartja a kormányrudat,
mint illik a vezérhez.
A király a többieknél még fél fejjel magasabb. Az ő testét sem
takarja öltöny; csak abban külömbözik a népeitől, hogy az ő
szironyos öve aranyboglárokkal van diszítve, s az üstökét
aranyabroncs szorítja körül. Arra való, hogy a csatában ráismerjen az
ellenség; a hivei úgy is jól ismerik.
Dávid királynak az arcza is kiválik a többiek közül, nem csak
hajának és szakállának rőt szine miatt, mint inkább azon jupiteri
méltóság által, mely a fejedelmet megkülömbözteti. Ezt nem
szeldelik keresztűl-kasul a ránczok; olyan sima és ragyogó az, mint
egy bronczszobor. Rendes beszéde halk és szelid; a ki az igazi szavát
akarja meghallani, az menjen oda az ütközetbe; a mi ezernyi száj
ádáz ordításán, a döngetett paizsok csattogásán, a hajóbordák
recsegésén messze túlhangzik: az a Dávid király vezénylő szava;
fegyvert sem hord az övén; ha verekedni kell, elveszi az
ellenségétől; a puszta ökle elég rá, hogy sisakot koponyástól
összetörjön, s a mázsás szikladarab úgy repül a kezéből, mint a
parittyakő; szégyenlené fegyverben keresni az oltalmát. S a mellett
olyan szelid, hogy otthon a kis fiát a nyakán hagyja lovagolni, s a
kutyái úgy vannak szoktatva, hogy elkapkodják az asztaláról az ételt;
rájuk nem üt.
Mikor a király liburnája arra a helyére érkezett az öbölnek, a hol a
habok elkezdenek fehér tajtékos barázdákat túrni (hajós nyelven:
«kecskéznek»), a mi a sekély medret jelzi: a király jelszavára
megállítják a géphajtó ökröket, s azzal a hajósok kiugrálnak a vízbe.
Még itt hónaljig ér az, de azért lehet dolgozni benne.
A liburnáról lebontják a védő sövényt, azután a két ökröt
kihajtják a vízbe; az kiuszik magától a partra, s első, a ki megitatja
magát a csergedező patakból. Azután szétbontják a gépeket, s
kihordják a partra. Majd a málhákat czepelik ki a vállaikon. Akkor
azután neki vetik a vállaikat a liburna párkányának s negyven
kemény férfi kiemeli az egész hajót a vízből, úgy hozza ki a vállain a
partra. A királynak az a felségi joga, hogy maga a hajóban marad, a
míg a hívei azt szárazra szállítják.
Csak azután, hogy minden munka be van fejezve, szabad a
hajósoknak a forráshoz rohanni és szomjukat csillapítani. Egy időre
az a patak megszünik folyni; a warángok kiiszszák egészen.
A második kötelességük azután odajárulni ahhoz a kőkereszthez
és azt megcsókolni. Maga Dávid király adja a példát a híveinek.
A barlanglakó szerzetes előjön sötét odujából, a hol egy koponya
és egy nagy irott könyv társaságában szokta tölteni idejét.
A mennyit a fejére húzott csuklya az arczából látni enged,
fiatalnak látszik, az állán még csak pelyhedzik a szakáll, s szép
csigametszésű ajkai felett engedelmesen simul kétfelé a bajusz.
Arcza halavány, de szemeinek tüze meghazudtolja az ascetát.
A szerzetes tud a warángok nyelvén beszélni, azért is lett
bizonyosan erre az állomásra rendelve.
Dávid király odajárul eléje s meghajtja előtte a térdét alázatosan,
áldását várva.
A szerzetes a koronás főre teszi a kezét s elmondja rá:
«Benedicat tibi Deus.»
Az még csak ott térdel és a fejét rázza. A hosszabbik áldást várja
a hosszú út után. A szerzetes azt is megadja neki:
«Benedicat tibi Deus Jehova, Deus Zebaoth, pater filius et spiritus
sanctus, Amen.»
Erre aztán fölemelkedik térdéről az óriás, s elmondja hiven, hol
járt, mi szörnyű tetteket vitt véghez? hány gályát sülyesztett el a
rajta levő népekkel együtt? milyen városokat égetett le porig? hogy
mosta meg a kezeit szép hajdanok könyeiben, a kiket az egyik
parton elrabolt, s a másikon rabnőül eladott.
Ezeket ő ugyan a Svantevitnek is el szokta mondani, mikor még
az volt a warángoknál a főisten, csakhogy dicsekedésképen, s az
jutalmat adott érte; mióta azonban a Svantevit, a kisebb
bálványokkal, a Khors Somogl és Mokos istenekkel együtt fel lett
döntögetve, a szent keresztség fölvétele után, az ilyen hőstettek a
meggyónni való bűnök sorába tartoznak, s ezekért vezeklés jár,
azután áldozat, végre bűnbocsánat.
A pogány hit bálványa, a tizenkét agyarú Svantevit ember-
áldozatot szokott ilyenkor követelni, még pedig nem rabszolgát,
hanem maguk a hős fiak közül egyet; az új hit kegyelmesebb, a
hódolatot, áldozatot elfogadja olcsóbb tárgyakban is. A király
parancsára odahordják a warángok ajándékaikat a szerzetes elé, a
nagy kősó koczkákat, tömjént, távol Arábiából, a mivel a
templomokat kifüstölik; elefántagyarakat, a mikből a barátok szent
szobrokat szoktak faragni; arany-brocátot vég számra oltárterítőnek
és selyemszövet-göngyöleget az apácza-fejedelemasszony
kantusához, a ki ott uralkodik a brantavölgyi kolostorban.
A szerzetes a kegyes adományokat behordatja a barlangjába,
majd onnan ő maga mindent háton felczipel a kolostorba, a mi benn
a hegyek között fekszik.
– Hát az én jó Bravallámnak vajjon mit küldhetnék, hogy örülne
neki? kérdé Dávid király, megemlékezve róla, hogy van neki egy
elválasztott felesége is ott abban a tüzes szentek kolostorában.
– A te elvált feleségednek a neve most Kozima, felelt neki a
barát.
– Én pedig Dávid vagyok. És így egészen idegenek lettünk
egymásra nézve. Láttad őt egyszer?
– Én nem láttam, hanem a főpapom, a ki gyóntatni jár oda.
– Mit beszélt neki?
– Azt nem tudhatod meg. A gyónás titka szentség.
– Tehát válaszsz tetszésed szerint a kincsek közül, a mik előtted
hevernek, mi kellene neki ezekből?
– Nem tudom, van-e ezek között kigyókő?
– Kigyókő? Mi az?
– Mikor a kigyók nagy sokaságban összegyűlnek királynőt
választani, egynek maguk közül valamennyien a fejére fujnak
mindaddig, a míg a sok méreglehelletből egy fényes kő támad, mely
ott ragyog a kigyókirálynő fején, mint egy diadém.
– S mi ereje van ennek a kigyókőnek, ha ember kezébe jut?
– Az, hogy megvédelmez a kigyók és minden mérges
csúszómászók és férgek marása ellen.
– S miért kell az én volt feleségemnek ilyen kigyókő?
– Azért, mert az az odu, a melyben ő lakik, tele van ilyen
kigyókkal és maró férgekkel.
Dávid király olyat dobbantott a lábával, hogy megrendült bele a
szikla.
– Az én Bravallám a kigyók vermében!
– Nem Bravalla, hanem Kozima.
– S miért zárták őt ebbe az odúba az apáczák?
– Azért, mert még mindig szereti az ő urát, a kitől erővel
elválasztották s nem akarja őt megtagadni.
Erre az a kegyetlen erős ember, a kinek mikor tüzes vasat fúrtak
a testébe, csak nevetett hozzá, elkezdett sírni. A két szeméből
kicsordult a köny. Az igaz, hogy a sírása is rettenetes volt, úgy
ordított, mint egy oroszlán.
– Az én szegény kis Bravallám a kigyók vermében. S azzal
felemelte az öklét, hogy a legközelebb eső tárgyat lezuzza vele,
legyen az élőfa, szikla, vagy ember.
Hanem aztán visszahőkölt. Az a nagy kőkereszt volt előtte.
Lelkébe tért, összeszedte magát.
– Nagyon fáj érte a szivem, hogy az a szegény kis teremtés úgy
szenved én miattam, de meg kell nyugodnom benne. Így parancsolja
az Isten. És én már hűséget fogadtam az én új Istenemnek, a
régieket ledobattam a sziklaörvénybe, onnan fel nem hozatom. A
főpap megkeresztelt, bele mártott a vízbe, keresztyén lettem.
Hitemet megtartom. Azért kérlek izend meg a főpapodtól, majd ha
megint gyóntatni odamegy, az elvált asszonyomnak, engemet ne
szeressen többé, mert a Jehova Isten azt parancsolta, hogy egy férfit
egy asszonynál többnek nem szabad szeretni.
– Én bizony nem tudom, hogy parancsolta volna ezt valaha,
mondá erre a barát.
– Mit mondasz, te barát?
– A mit az irás mond. Tudod, hogy van egy szent könyv, a miben
mind azoknak a szenteknek és prófétáknak a története fel van
jegyezve, a kiknek a Jehova parancsokat osztott.
– Hol van ilyen könyv?
– Lássad és halljad.
A szerzetes bement a sziklaoduba s kihozta a nagy kapcsos
könyvet, melynek pergamen levelein tarkállott a gyönyörű sok irás,
czinober, ultramarin és sárarany nem volt kimélve tőle.
Ráfordított egyenesen a Sámuel II-ik könyvére, kikereste annak a
III-ik részét.
– Ime vedd szivedbe, a mit e sorok veled közölnek. Dávid
királyról, a szentről beszélnek e sorok, a kinek a zsoltárait
hangoztatják a templomok, éneklik a szentek, kisérik az orgonák. Ő
a királyok legdicsőbbike, Jehova kegyencze a koronás fők között, a
kinek a nevét számodra kiválasztották.
– Igen! Maga a római főpap adta nekem ezt a nevet.
– A próféta, az Isten követje, Sámuel, így számlálja elő szent
Dávid királynak a nemzetségét: Születének neki Hebronban fiai: az
elsőszülött Ammon, Alimoámtól, a második Kileáb, Abigailtól, a
harmadik Absolon, Maákától, a negyedik Adonia, Haggistól, az ötödik
Sefásia, Abitáltól, a hatodik Ishreám, Eglától, a kik mind egy időben
valának Dávid feleségei.
– Ez abban a könyvben van? mormogá a waráng fejedelem.
– Hallgasd meg tovább! Fordítsunk más lapra. Mikor már együtt
volt a hat feleség, akkor még visszavette hetediknek Mikhált, a
megholt Saul király leányát, kit erőszakkal elválasztottak tőle.
– S neki szabad volt az elválasztottat visszavenni? kérdi
hüledezve a király.
– Még nem csak ezt. Következik még Bethsabé, ennek a fia,
Salamon lett szent Dávid után a király.
A waráng fejedelem tombolt haragjában.
– Hát az én védszentemnek szabad volt nyolcz feleséget tartani s
én tőlem elszakítják kettő közül a szeretőbbiket! Barát! Hátha nem
mondtál igazat?
– Lelkem rajta, hogy igaz a szavam.
– De nagy külömbség van ám a szó és a szó között, épen mint a
szél és a szél között. Az egyik szél odaviszi a hajómat, a hová én
akarom, a másik oda csapja, a hová ő akarja. Ha a macska nyávog,
attól a majom sem ijed meg; de ha a mándrutz nyávog, attól az
elefántok is a pusztába iramodnak. A mit te beszélsz, az csak olyan
kis kölyökpapnak a beszéde, neked csak ilyen kopott csuhád van;
egy kereszt, meg egy fésüs kagyló rajta, ki áll meg a te beszédedet
hallgatni? De bezzeg az, a ki nekem ezt az arany koronát adta, ott
abban a csoda nagy városban, Rómában, az a főpap drága selyem
palástot viselt, a mely koczkákra volt felosztva, egyik koczkában egy
arany oroszlán, másikban egy ezüst kakas. Az az igazi főpap. Annak
a szava áll meg, nem a tied. Az pedig azt mondta nekem, hogy a
kereszt Istene követeli, hogy az egyik feleségemet eltaszítsam
magamtól. Én térdeltem e dicső főpap előtt s engedelmességet
esküdtem neki. A kezemet rátettem egy ilyen könyvre, a milyenből
most nekem daráltál.
– No hát majd hozok én neked egyszer egy olyan főpapot, a
kinek arany oroszlánok és ezüst kakasok vannak a palástján, majd
annak jobban fogsz hinni.
Ezt mondva, összecsapta a nagy könyvet a szerzetes s nyalábra
fogva, bement vele a sziklaodujába. A nap delelőn állt, egy kis
harangláb nyult fel a barlangból, a barát elkezdett délre harangozni.
Dávid királynak pedig a szivébe volt lőve az a nyil, a mit nem
lehet onnan kiszakítani.
– Dologra szakállasok!
A parancsszó szájról-szájra lett adva. Hozzá fogtak zúgolódás
nélkül. Az pedig titánoknak való munka volt. A hajókat elszállítani a
telelő öbölbe. Hol van az? ott a sziklamagaslaton túl van egy
tengerszem. Az a waráng hajóknak a téli kikötője. Ott nem érheti
őket a tengerháborgás, a vihar; nem gyújthatja fel az ellenség, nem
fúrhatják össze a tengeri csigák.
A ki felnéz erre a kopár haránt sziklafalra, azt mondja,
lehetetlenség ez, oda egész hajókat felvinni, a warángok
megmutatják, hogy lehet.
A sziklaoldalban látható egy csapinós barázda: olyan, a milyenről
azt mondják, hogy az ördög szekerének a vágánya az, a mint a
menyasszonyát a pokolba haza kocsikáztatta. Ennek a
sziklarepedésein felkúsznak a fiatal legények, fel, száz lábnyi
magasba. Akkor onnan felűlről sima fenyőszálakat szánkáztatnak alá.
A fenyőszálakat addig róják egymásba, a míg azok egy csuszka
pályát képeznek, mely a kikötőig leér. Akkor ezeket a fenyőket a
belső oldalaikon megkenik fagygyuval, azután ezekre a sikamlós
vágányokra ráteszik a liburnát, köteleket kötnek az orrára, azokba a
sziklapárkányon levő férfiak belekapaszkodnak, a többiek, a
mennyien hozzá férnek, emelő dorongokkal, segítik a nehéz hajót
fölfelé csusztatni. A meredekre felkapaszkodva csak úgy keresgetik a
támpontot, a hová lábaikat megvessék, s ez óriási erőfeszítés úgy
folyik végig, hogy egy kiáltó szó nem hallik mellette. A ki eltalál
bukni, a szikla aljáig meg nem áll; de egy sem esik el. Egymásután
mind az ötven liburna felkúszik az ördögbarázdán, onnan tovább
viszik őket, embervállon, egész a nagy tengerszemig, a hová aztán
lebocsátják, egymáshoz kötözve valamennyit.
Utoljára marad a zsákmány tömege. Azt nyers ökörbőrbe takarva
vontatják fel ugyanazon a fenyősiklón. Mikor minden el van takarítva,
akkor magukat a fenyőszálakat húzzák fel kötéllel, az utolmaradt
csapat meg a háromöles evezőket viszi utánuk.
Az ökrökkel elbántak, azokat levágták, fellakomázták. Csakúgy
frissiben, nyersen. Nincsenek elkényeztetve. Minden nagyven
warángra jutott két ökör; nem is sok, eleget koplaltak Corcyrától
idáig; a maradékért majd eljönnek a dabózák s eltakarítják. Holnap
reggelre nyoma sem lesz annak, hogy a warángok itt jártak egész
hajóhadastul. Kereshetik őket az ellenük összeröffent génuai,
velenczei és zárai hajóhadak. Elnyelte őket a Cadmus sziklája.
És azután bele fog telni egy esztendő, talán kettő is, hogy a
waráng népnek még neszét sem hallja a világ; azt hiszik elvesztek,
míg egyszer megint előbukkannak valahol s azt mondják, itt
vagyunk.
A MIRÁKULUM.
A warángok eltünése után ismét emberhangtalan csend lett a
völgyben, a sziklák megszüntek dübörögni, a tenger zúgása
elalvódott, a habok elsimultak, egy szellő nem fodrozta a végtelen
víztükröt. Olyan általános csend volt az, a miben a magányos ember
azt hiszi, hogy maga is meg van halva.
S a cadmæi sziklákat őrző szerzetes ilyen magányos ember. A
warángokat kivéve emberi teremtés nem jön az odujához. Állat is
ritkán. A tengeri sasok fenn a sziklaodukban fészkelnek, ide le nem
szállnak; más madár itt nem jár; a szomszéd sziklában tanyázó
dabózák csak éjszaka járnak ki a partra, azok elől el szokta a
kunyhóját torlaszolni gerendákkal, mert ezek az eleven szenteket is
szeretik. Csak néha vetődik oda a forrásvízhez egy-egy patkány, az
mulattatja a remetét; talán már ismerik is egymást, a kis fenevad
nem fél a mozdulatlan embertől, leül előtte fonni, a füleit törülgeti a
két első lábával, körben forog, kergetve a saját farkát, aztán oda
megy hozzá, megszaglászsza a faczipőit, összeköszörüli a hegyes
fogait és czinczogva fut odább.
Talán ez az izenethordó patkány?
Ez a remete itt a Frater Aktæon, a Soror Kecharizmenének a
kedvese, mátkája, – talán férje?
Mi volt ennek a két embernek a története?
Az ifju a leghatalmasabb raguzai patriciusnak a fia; a hölgy egy
dalmata zsupán leánya. A huszonhat patricius családnak egyike, a
Boboliaké, a kikre a köztársaság rektori hivatala sorba jár; a zsupán
pedig a bosnyák király legkevélyebb és legzabolázatlanabb vazallja.
A két család között ivadékról-ivadékra szálló vérboszu áll fönn. Ez a
dalmatáknál bevett szokás, a mit meg nem szüntet semmi civilisatio.
Aztán a zsupán hatalmasabb embernek tartja magát a királynál, a
raguzai rektor pedig a velenczei dogénál. A zsupán birtokosa
rengeteg nagy erdőknek, azokban juh és sertés nyájaknak,
gulyáknak; ő a tulajdonosa a hirhedett mosszori aranybányának,
melyet rabszolgákkal míveltet, a raguzai rektor pedig ura a
tengereknek, vannak márvány palotái Raguzában és a tengeri
szigeteken pompás kertjei, s a gályáin még több rabszolga izzad,
mint a zsupán bányáiban. A zsupán előtt a raguzai rektor csak
kalmár, a rektor előtt a zsupán csak pásztor. És mindezek felett a
raguzai patricius igen buzgó római katholikus; a zsupán pedig
istentelen patarénus.
Mind a kettő adósa egymásnak a gyűlölet minden fajtájával.
S ezeknek a magzatjaik beleszeretnek egymásba.
Hogy történhetett ez meg?
Úgy, hogy egyszer (dehogy egyszer, tizenegyszer) a római pápa
kiadta a fulminatoriumot a magyar királynak, hogy adja ki a
parancsolatot a maga vazalljának a bosnyák királynak, hogy az
kényszerítse a maga zsupánjait, hogy a minden Istent és papot
megtagadó patarenus vallás követésével hagyjanak fel s az
eretnekséget szüntessék meg.
Mert akkor száznegyvenkilenczféle keresztyén felekezet volt
Dalmatiában, s annak mindeniknek volt külön temploma. Ötven ilyen
templom volt csak Raguza falain kívül, belül csak az egy idvezítő hit
templomai és hivei voltak megtűrve.
De valamennyi között legrosszabbak voltak a patarenusok, mert
azoknak semmiféle templom se kellett, se pap; annálfogva semmi
sakramentum. Még az imádságot is kárhoztatták, azt állítva, hogy az
imádság megsérti az Istent. Ezek az életkorukat nem is a
születésüktől, hanem kilencz hónappal előbbről számították.
Ezeket tehát vagy szentelt vízzel, vagy tűzzel el kellett téríteni a
pokol útjáról.
A sok parancsolatnak utoljára még is lett foganatja. A magyar
király kiküldte a rámai herczeget hadsereggel, hogy mondja meg a
bosnyák királynak, hogy térítse meg a patarénusait; akkor a bosnyák
király, látva, hogy ez már nem tréfa, ostrom alá fogta a hitetlen
zsupánjait sziklaváraikban, azok aztán, mikor nem győzték tovább az
éhezést, megadták magukat s engedelmességre tértek. Az volt pedig
nekik parancsolva, hogy mind valamennyien családostul menjenek le
Raguzába s ott vegyék fel a keresztséget, és hallgassanak misét.
Így került a hatalmas zsupán egy napon Raguzába, feleségestől,
fiastul, leányostul.
Már maga az a szokatlan nagy ünnepély, a tömeges keresztelés,
eléggé nevezetes látvány volt Raguzában, a minek magasztosságát
emelte az a körülmény, hogy azon időben a keresztelésnél az egész
embert belemártották a vízmedenczébe, de még érdekesebbé tette a
szertartást az, hogy Raguza városának se utczáján, se piaczán, se
templomában ifju hajadont soha sem lehetett látni. Leánynak kilépni
a szülői házból és megmutatni magát idegen szemek előtt, épen
olyan botránynak tartották, mintha mai nap festő-modellnak állana ki
egy jó nevelésű szűz.
Az utczán csak a szolgaleány járhatott, az előkelők zár és
függöny alatt voltak egész a férjhezmenetelükig. Vőlegénynek a
menyasszonyáról annyit sem volt szabad tudni, hogy szőke-e vagy
barna? még az esküvőnél is fátyol takarta a mátkát tetőtől talpig, s
csak otthon a férj fedezte fel a titkot a saját házánál, hogy kit vett
feleségül?
A Zsupán leánya megcsodálni való szép volt.
Minden megkeresztelendő neophitának egy keresztapát kellett
választani, a kinek a nevét maga egy urnából húzta ki.
Hát vak sors-e az, mely a Boboli nevet adta a szép pataréna
kezébe?
Ettől a pillanattól kezdve aztán halálosan megszerették egymást.
Pedig ez nem lett volna szabad. Mert először az apáik halálosan
gyűlölték egymást, s a szülői consensust ekként nem remélhették;
másodszor vérboszu volt a két család között, mely arra kötelezte
őket, hogy egymásnak a családjába a halált vigyék be, ne az életet;
harmadszor az ifjunak apai fogadalom következtében (épúgy mint II.
Endre királynak) kötelessége leendett a keresztes vitézek közé állani
és elmenni Palestinába, ott magát sánta-bénává veretni; a leány
ellenben már el volt jegyezve egy feketehegyi knézzel, a ki a
jegykendőt is elküldte a számára; és negyedszer: a mi legfőbb
impedimentum, az ifju Boboli keresztapja lett a Zsupán leányának, s
hogy a keresztapa feleségül vegye a keresztleányát, ez a
legégbekiáltóbb patarénusság!
De azért mégis megtették.
Egy napon a fiatal Boboli összeszedte a czimboráit, a
fegyvereseit, lesbe állt a völgyben, a melyen keresztül kellett a veliki
Knéznek a nászmenetével átvonulni, azt megtámadta, egynehány
czernagorczának beverték a fejét, a vőlegénynek eltörték a lábát, az
megsántult, a menyasszonyt pedig nyergébe kapta a fiatal lovag s
elvágtatott vele a legközelebb útban talált zárdáig; volt ott elég, ott
minden törvényes czeremonia nélkül összeeskette magát a
leánynyal, s azzal menekült vele egy sziklapart szakadékai között
rejtve tartott kalózhajóra, s aztán neki a tengernek!
Az volt a szándéka, hogy átvitorlázik Velenczébe s ott beáll az
ellenséges köztársaság szolgálatába.
Ámde a boszuálló nemezis hamar utolérte, mert az apja,
megtudva e hallatlan gonosztettét a fiának, rögtön utána indítá a
legnagyobb vitorlás brigantinéját, a fiatal párt utolérték a tengeren,
visszahozták; a házasságukat természetesen semmisnek nyilváníták,
a leányt beadták a három tüzes szentek kolostorába, a míg az
ördögöt ki nem űzik belőle, ott marad; az ifju lovagot pedig a bazilita
barátok közé dugták. Ezek pedig oda parancsolták őt a cadmæi
sziklák öblébe, a remete-oduban tölteni a vezeklés éveit. Ez a völgy
egy természet alkotta börtön, a melyből nincs kijárás se szárazon, se
tengeren. Kivéve a warángok útjain. De hát ki tudja azokat követni.
Ez volt a két fiatal szerelmes története.
Most aztán csak a patkánytól izenhetnek egymásnak szerelmi
epedéseket.
Frater Aktæon a kőkereszt mohlepte talapján ülve bámult a
messzeségbe. A sima tenger összefolyt a sima éggel, úgy, hogy a
láthatár egészen eltünt, egy vitorla nem látszott se távol, se közel,
még a sirályok sem repkedtek a víz felett. Egyike volt azoknak a
csodálatos pillanatoknak, a mikor az örökké éber tenger alszik.
A forrás magaslatáról végig lehetett látni szemközt a sík tenger
elszórt apróbb szigetein, s két oldalt, délnek és északnak a
partvidéken a gravosai kikötőig és Raguza bástyaövezte
toronyhalmazáig.
Még akkor városok álltak ott, az erdőkből kimagasló tetőkkel, a
hol most már se ház, se erdő: az olajgazdag Ortopula, a karcsu
tornyú Argyruntum, a nyomtalanul eltünt Blandona, a mit a régészek
hiába keresnek, Delminion, a mi Dalmatiának a nevét adta s a
liburnok Arauzája, még akkor megannyi büszke nép tanyája; maguk
a szigetek megrakva kéjlakokkal; némelyik olyan kicsiny, hogy csak
egy pásztorkunyhó fér el rajta; de az is tele virágos fákkal, a még
kisebbeken már csak zuzmó zöldül, s aztán egy csoport apró szikla,
elszórva szerteszélylyel, a minek a háta egészen kopár. S a
szélcsendes tenger tükrében minden város, palota, kunyhó, kopár
szirt kettős alakban tünik elő, beburkolva kékes átlátszó páraködbe.
A szerzetes végig bámult a hallgató nagy világon. Azután felvett
egy kavicsot a kezébe s azt nézte merően.
S a széles nagy világ, és a között a kavics között volt valami
eszmeközösség.
Frater Aktæonnak eszébe jutott Plinius mondája, hogy van a
dalmát partok sziklái közt egy mély barlang, a melybe ha egy
kavicsot belehajítanak, olyan forgószél támad elő a mélyéből, a
legnagyobb szélcsend idején is, mely a viharral egyenlő. E barlang
neve Senta. Így irja Plinius. S a tiszteletreméltó tudós Hermolaus
Barbarus, aquilejai patriarcha bizonyítja, hogy ez a barlang
csakugyan létezik, Dioklea mellett van. Satának nevezik. Frater
Aktæon jobban tudja mind a kettőnél, hogy hol van ez a barlang.
Azon gondolkozik, hogy bele hajítsa-e azt a kavicsot?
Az égboltozat színe mind jobban összekeveredik a tengerével, a
szigetek, a scogliok elvesztik a szineiket, s egyforma kék árnyképek
gyanánt szakgatják meg az átlátszó homályt, a nap maga mint egy
sugártalan tányér tünik fel az égen.
Egyszerre egy óriási nagy hajó jelenik meg a víztükör felett; olyan
rémséges nagy tömeg, a minőt tenger nem hordott soha. Talán csak
a rémképe egy hajónak. De kivehetők minden árboczai, mind a
három; a vitorlák duzzadtak, maga a rafálvitorla hegyesen kinyuló
rudján, domboruan feszül előre. A hajó északtól délfelé siet.
Nehány pillanat mulva egy másik hajó tünik fel, az elsőnek az
árnyképe, épen annak a hegyében, de fenekével fölfelé s az
árboczaival lefelé fordulva, úgy hogy a két hajóárbocz hegyei
egymást érintik. Mind a ketten egyesülten tartanak délfelé.
S a hol a két fantomnak az árboczai találkoznak, abba a vonalba
esik a nap sugártalan gömbje.
Mikor a kettős hajóárnyék eléri a napot, egyszerre mind a
kettőnek a fenekén, alul és fölül még egy napkisértet támad, három
sápatag, beteg nap az égen.
Ezt a mirákulumot az egész dalmata parton és a görög
tengermelléken mindenütt látták és bámulták és az égi jelenségből
nagy schismaticus szakadást, ellenpápák támadását jósolták a
csillagtudósok. Frater Aktæon elrejté a kavicsot a csuklyája fenekére.
«Disputa.»
Kritikus. Az astrologusokat hagyom uralkodni a maguk csillagai
között; a kettős és hármas napokat sem kifogásolom, ámbár
megvallom, hogy szeretném én már egyszer egy ilyen kettős napnak
legalább a photographiáját látni. Hanem egy dologról szeretném
magamat felvilágosíttatni. Vajjon volt valami elfogadható oka ennek
a Frater Aktæonnak, hogy az egyik fejezetben Canavelli Zenonak
neveztesse magát, a másikban pedig a Boboli patricius család
ivadékának iratkozzék be? vagy épen csak hogy valami emberi dolog
történt a szerzővel: «lapsus memoriæ», elfelejtette egyik hétről a
másikra, hogy kinek hivták a regénye hősét?
Szerző. Ennek igen egyszerű magyarázata van. Zeno egyike volt
Raguza híres versiróinak, s az irói neve, a min kortársai ismerték,
volt Canavelli; verseket is tudnék tőle idézni, ha a latinosságommal
akarnék pompázni. Hogy a költők családi neveiket nem használták,
ennek az okát fel lehet találni az aristocraticus előitéletekben, s a
minden korszak versiróinak exlex állásában. Hasonló példákat
minden nemzetnél találunk. Az angoloknál Boz, a francziáknál
George Sand, a németeknél Anastasius Grün, a magyaroknál
Szigligeti. Így volt Boboli egyúttal Canavelli is, ezentúl azonban
megmarad Frater Aktæonnak.
Kritikus. Tudtam, hogy még neki fog feljebb állni! Már most tehát
azt kérdezem, hogy miféle subát, vagy micsodát tetszett ráadni a
római pápára, a mire a kakasok és oroszlánok voltak kihimezve.
Pápát már csakugyan láttam, még pedig Pio Nonot, mikor 1848-ban
osztotta az áldást husvét napján a szent Péter temploma előtt teljes
ornátusában. De ilyen czifra szürt nem láttam ő szentségén.
Szerző. Tetszett volna csak hétszáz esztendővel hamarább
odamenni, akkor megláthatta volna. Az egyházi viseletnek is változó
volt a divatja. Abban az időben még a hármas tiarát sem viselte a
pápa. Ellenben azt a szép palástot, mely a waráng Dávid királynak
annyira imponált, meg lehet találni Spallart minden népek és
korszakok jelmezeinek gyűjteményében; jelképezvén az oroszlán a
legfőbb erőt és hatalmat, a kakas pedig szent Péter ébresztőjét, míg
ellenben a többi főpapok épen olyan koczkákra osztott palástokon a
galamb és bárány himzett alakjait viselték: a szelidség és
engedelmesség jelvényeit. Most már mind a kettő kiment a divatból.
Hogy miért? azt fürkészszék a historikusok.
Kritikus. No ez hát jó volt a főpapoknak, de ugyan mire lehetett
jó a jámbor warángoknak az a rézöv, a mibe őket szerző
kegyelmesen felöltözteti? (mint czigány a fiát egy nyakravalóval.)
Hiszen ez a rézöv, meg az a körül lecsüggő pityke, sodrony, láncz,
fibula, mikor hideg volt, még hidegebbet tartott, ha pedig forró nap
sütött, mint a téglázóvas, olyan jól eshetett az ember meztelen
bőrének.
Szerző. Ennek a rézövnek pedig nagy oka volt arra, hogy a
warángok viseljék. Biz az nem pótolná nálunk mai napság a flanel
alsó inget, de hát azok másforma vívású emberek voltak. A waráng
férfi mindegyik választott magának egy «ját»-ot, a kivel a
hadjáratokban elválhatlan volt; a dereglyén egymás mellett eveztek,
a csatában egymás mellett harczoltak. A viadal alatt a két ját ezeknél
a rézöveknél és a róluk lecsüggő lánczoknál fogva egymáshoz
csatolta magát, ha az egyik elesett, a társa nem hagyhatta ott, meg
kellett a bajtársát mentenie, holttestét magával vinni a harczmezőről,
vagy neki is ott kellett a társával együtt elesni. Ennek a hőslelkű
fogadásnak a jelképe és biztosítéka volt az a bronzöv, függő
lánczaival együtt.
Kritikus. S létezik valahol a világon ilyen tiszteletreméltó
bronzkrinolin, szemmel látható mivoltában?
Szerző. Egy teljesen összeállítottat lehet látni a kolozsvári
országos museumban.
Kritikus. Fiat piscis! Tehát lássuk, mire tanítanak bennünket még
a warángok?
A WARÁNGOK OTTHONA.
«Hazának» nem lehet azt nevezni, mert ezt a fogalmat a
warángok nem ismerték. Másfél század óta kóborolnak alá s fel a
világban, sehol sem települve meg állandóul, mintha Ahasvér átkát
örökölték volna. A skandináv partok épen úgy ismerik a warángok
hírnevét, mint a Volga pusztái; a nagy Duna a Vaskapun alul nem
volt nekik gát, a hatalmas bolgár nemzet nem tarthatta fel
aczélrohamukat, a Bosporus tengerszorosát átlépni nem volt nekik
lehetetlenség, Kis-Ázsia akkor is a világ paradicsomkertje volt,
elfoglalták; ott sem maradtak meg, tovább űzte őket a harczvágy,
nem volt nekik elég a szárazföld, tengerre szálltak, bejárták az afrikai
partokat, rémei voltak a szigeteknek, a hiberniai, az itáliai
kikötőknek, és seholsem maradtak otthon, seholsem hagytak hátra
egy felépített várat, mely emléküket megtartotta volna. Hanem
megjelöltek minden országot, a hol egykor otthonuk volt, csatában
elesett hőseik sírjaival. Azok a bronzkardok, karpereczek,
üveggyöngyök, a mik mázatlan edényekkel együtt a sírleletekből
napfényre kerülnek, a világ minden részében ugyanegy kéz
munkájára mutatnak. Úgy látszik, mintha lett volna egy nagy
nemzet, mely egész Európát lakta egykor. Nem lakta, csak meglakta;
végig tanyázott rajta.
Mindenkinek feltünik, hogy ezeknek a talált rézkardoknak a
markolatja olyan kicsiny. Egy mai korbeli férfiököl nem szorul bele,
egy ujja lemarad róla. Mintha asszonykéz számára lettek volna
alkotva.
Mikor aztán három világrész országait ilyen szépen behintették
bronzfegyveres halottaikkal, úgy elfogytak, hogy utoljára a sok
aczélba öltözött harczos nép beszorította őket ide, ebbe az utolsó
otthonukba, a hol azután nehéz volt erőhatalommal legyőzni a hős
nép maradványát, de annak is nehéz volt a czivilizált világot
nyugtalanítani. Körülöttük csupa hegylakó harczias népek, a fekete
chrobátok, a bosnyákok, a czernagorczok, albanok; a partokon
hatalmas hadtartó városok, Raguza, Zára, a tengeren Velencze,
Genua hajóhadaikkal, melyek tízezreit a keresztes vitézeknek hordták
a szentföldre. Hanem azért a warángok mégis tudtak maguknak utat
nyitni a világba, s ha behajtották a maguk adóját, mint tisztességes
munkás emberek az aratás után, szépen hazamentek az otthonukba
s nagyot pihentek.
Ha hazának nem, talán «tanyának» lehet nevezni a warángok
tartományát.
Ha kétezer volt a harczos férfi, akkor lehetett az egész népszám,
asszonyt, aggot, gyermeket és rabszolgát összeszámítva
harminczezer. Több nem is élhetett volna itt meg.
A tenger felől magas meredek sziklafalak zárták el a tanyát, a
miken áthágni őrültséggel határos merészség kellett, a
bérczszakadékok mélyen bevágtak a hegyek közé, természetes
határokat támasztva ellenséges szomszédok között. Ezeken belül
terült az őserdő, óriási tölgy és bükkfáival, menedéke a rőt és fekete
vadnak, a medvének és hiuznak, s a hogy irják, a vadtuloknak, mely
itt a vadászható állatok közé tartozott. Az erdő mint egy hatalmas
bunda takarja a hegyek vértjét, egész a válláig; csak ott a hegytetőn
szakasztja félbe egy merészen kiemelkedő sziklatorony, mintha feje
volna az óriásnak, s azon is bozontos üstök gyanánt borul körül a
henye krumpuczfenyő.
A ki e szikla homlokára felhág, az egész waráng tanyát beláthatja
róla.
A sötétzöld erdőpalástot észak felé hosszú fensík szakítja meg,
melyen egy barátságos ér kanyarog végig, mely a hegyoldalból jő,
zuhatagokat képezve alá. Ez ér mentében vannak sorba építve a
warángok házai (faépület mind) és azután a többi ház négyszöget
Welcome to Our Bookstore - The Ultimate Destination for Book Lovers
Are you passionate about books and eager to explore new worlds of
knowledge? At our website, we offer a vast collection of books that
cater to every interest and age group. From classic literature to
specialized publications, self-help books, and children’s stories, we
have it all! Each book is a gateway to new adventures, helping you
expand your knowledge and nourish your soul
Experience Convenient and Enjoyable Book Shopping Our website is more
than just an online bookstore—it’s a bridge connecting readers to the
timeless values of culture and wisdom. With a sleek and user-friendly
interface and a smart search system, you can find your favorite books
quickly and easily. Enjoy special promotions, fast home delivery, and
a seamless shopping experience that saves you time and enhances your
love for reading.
Let us accompany you on the journey of exploring knowledge and
personal growth!
ebookball.com