I have this here LaTeX code:
\documentclass{article}
\usepackage{geometry}
\geometry{a4paper, portrait, margin=1in}
\usepackage{graphicx}
\usepackage{wrapfig}
\begin{document}
\section{Klasična rasterizacija}
\begin{wrapfigure}{r}{0.4\textwidth}
\centering
\includegraphics[width=0.38\textwidth]{images/OpenGLPipeline}
\caption{OpenGL cijevovod}
\end{wrapfigure}
Prilikom klasične rasterizacije (koja se ponekad naziva i trokut rasterizacija) trodimenzionalna se scene projicira na dvodimenzionalnu površinu, najčešće ekran. Kako bi to bilo postignuto potrebno je svaki od elemenata scene provući kroz rasterizacijski cjevovod koji se sastoji od nekoliko faza.
\subsection{Pregled cjevovoda OpenGLa}
\paragraph{}
Ovo je grubi popis faza cjevovoda OpenGLa:
\begin{itemize}
\item Specifikacija točaka
\item Vertex shader
\item Teselacije
\item Geometry shader
\item Sastavljanje i procesiranje primitiva
\item Rasterizacija
\item Fragment shader
\item Post procesiranje fragmenata
\end{itemize}
Vertex, geometry i fragment shader su programabilni koraci koje se potpunosti može kontrolirati, dok je većina ostalih koraka fiksna. Na neke od njih može se ograničeno djelovati podešavanjem raznih varijabli.
\subsection{Pregled cjevovoda OpenGLa}
\subsubsection{Specifikacija točaka}
\paragraph{}
Kako bi renderiranje započelo, grafičkoj se kartici trebaju dostaviti svi podaci o entitetu koji se želi prikazati. U memoriji grafičke kartice nalaze se bufferi u koji se ispunjuju podacima o entitetu koji se trenutno crta. To se ostvaruje tako da se šalje set podataka za svaku pojedinu točku, a to su najčešće pozicija točke, normala na točku te mapirane koordinate na pridruženim teksturama. Podaci koje šaljemo mogu imati bilo kakvo značenje jer se u idućem koraku tim podacima može manipulirati na proizvoljan način.\\
Svi podaci ne moraju nužno biti vezani za pojedinu točku, već se mogu slati podaci koji su vezani na čitave setove točaka (recimo sve točke koje čine pojedini model), ili podaci koji su globalni i vrijede uvijek (poput pozicije, prirode i intenziteta izvora svjetala u svijetu ili recimo pozicije kamere). Prije samog početka rada grafičke kartice, u nju se učitavaju i razne teksture koje se koriste tijekom renderiranja.
\end{document}
This produces this document:
I don't want the bottom margin to be that big. I'm fully aware of /vspace command, but I'm looking for a solution that will work on any image that displays this behaviour in any setting, I don't want to have to manually set it each time something changes.
The image in question can be found on the khronos website.
wrapfig
has problems when used near lists like itemize
. To workaround you could specify the number of short lines (adjust [18]
to suit your image, my guess would be something around 26
might work):
\documentclass{article}
\usepackage{geometry}
\geometry{a4paper, portrait, margin=1in}
\usepackage{graphicx}
\usepackage{wrapfig}
\begin{document}
\section{Klasična rasterizacija}
\begin{wrapfigure}[18]{r}{0.4\textwidth}
\centering
\includegraphics[width=0.38\textwidth]{example-image-10x16}
\caption{OpenGL cijevovod}
\end{wrapfigure}
Prilikom klasične rasterizacije (koja se ponekad naziva i trokut rasterizacija) trodimenzionalna se scene projicira na dvodimenzionalnu površinu, najčešće ekran. Kako bi to bilo postignuto potrebno je svaki od elemenata scene provući kroz rasterizacijski cjevovod koji se sastoji od nekoliko faza.
\subsection{Pregled cjevovoda OpenGLa}
\paragraph{}
Ovo je grubi popis faza cjevovoda OpenGLa:
\begin{itemize}
\item Specifikacija točaka
\item Vertex shader
\item Teselacije
\item Geometry shader
\item Sastavljanje i procesiranje primitiva
\item Rasterizacija
\item Fragment shader
\item Post procesiranje fragmenata
\end{itemize}
Vertex, geometry i fragment shader su programabilni koraci koje se potpunosti može kontrolirati, dok je većina ostalih koraka fiksna. Na neke od njih može se ograničeno djelovati podešavanjem raznih varijabli.
\subsection{Pregled cjevovoda OpenGLa}
\subsubsection{Specifikacija točaka}
\paragraph{}
Kako bi renderiranje započelo, grafičkoj se kartici trebaju dostaviti svi podaci o entitetu koji se želi prikazati. U memoriji grafičke kartice nalaze se bufferi u koji se ispunjuju podacima o entitetu koji se trenutno crta. To se ostvaruje tako da se šalje set podataka za svaku pojedinu točku, a to su najčešće pozicija točke, normala na točku te mapirane koordinate na pridruženim teksturama. Podaci koje šaljemo mogu imati bilo kakvo značenje jer se u idućem koraku tim podacima može manipulirati na proizvoljan način.\\
Svi podaci ne moraju nužno biti vezani za pojedinu točku, već se mogu slati podaci koji su vezani na čitave setove točaka (recimo sve točke koje čine pojedini model), ili podaci koji su globalni i vrijede uvijek (poput pozicije, prirode i intenziteta izvora svjetala u svijetu ili recimo pozicije kamere). Prije samog početka rada grafičke kartice, u nju se učitavaju i razne teksture koje se koriste tijekom renderiranja.
\end{document}